当前位置: 首页 > news >正文

CentOS服务器SSH远程连接全指南

💻CentOS 服务器 SSH 远程连接全攻略|从安装到安全配置保姆级教程

作为运维新手第一次接触 CentOS 服务器时,被 SSH 配置搞得焦头烂额!整理了从安装到高级安全设置的全流程,附超详细命令和避坑指南,手把手教你搞定远程连接👇

📌 基础概念扫盲

SSH(Secure Shell):Linux 服务器最常用的远程管理协议,通过加密传输防止数据窃听。它采用非对称加密技术,在客户端和服务器之间建立安全通道,可以有效防止中间人攻击。SSH 协议由芬兰学者 Tatu Ylönen 于 1995 年设计,是目前最安全的远程登录方式之一。

默认端口:22(建议修改为非默认端口提高安全性)。常见的替代端口有:2222、3333、4444 等,但避免使用常见服务端口(如 80、443)。端口号范围应在 1024-49151 之间,低于 1024 的端口通常为系统保留端口。

两种认证方式: ✅ 密码认证(适合新手):简单易用,但安全性较低,容易受到暴力破解攻击 ✅ 密钥认证(更安全,推荐生产环境):采用非对称加密,安全性高,避免了密码泄露风险

一、安装与启动 SSH 服务

1. 检查是否已安装

# 查看SSH服务状态
systemctl status sshd
# 若显示"active (running)"则已安装,否则执行安装命令
# 也可通过以下命令检查安装包
rpm -qa | grep openssh-server

2. 安装 OpenSSH 服务(CentOS 7/8 通用)

# CentOS 7/8安装命令相同
yum install openssh-server openssh-clients -y
# 安装完成后,可通过以下命令查看版本
ssh -V

安装完成后,系统会自动创建以下重要文件:

  • 服务端程序:/usr/sbin/sshd
  • 客户端程序:/usr/bin/ssh
  • 配置文件:/etc/ssh/sshd_config(服务器配置)
  • 客户端配置文件:/etc/ssh/ssh_config(可选配置)
  • 密钥文件存储目录:/etc/ssh/ssh_host_*_key

3. 启动并设置开机自启

# 启动SSH服务
systemctl start sshd
# 设置开机自启动
systemctl enable sshd
# 验证服务状态
systemctl is-enabled sshd

二、远程连接实战(Windows/Mac 通用)

▶ Windows 用户(推荐 PuTTY 工具)

  1. 从官网 Download PuTTY - a free SSH and telnet client for Windows 下载 PuTTY
  2. 运行 PuTTY,在"Host Name (or IP address)"输入服务器 IP
  3. 在"Port"输入 SSH 端口(默认 22)
  4. 点击"Open"按钮连接
  5. 首次连接会弹出安全警告窗口("The server's host key is not cached"),点击"是"保存服务器指纹
  6. 在终端窗口输入用户名和密码完成登录
  7. 可选:保存会话配置方便下次连接

▶ Mac/Linux 用户(自带终端)

# 基本连接格式:ssh 用户名@服务器IP -p 端口(默认22可省略)
ssh admin@192.168.1.100# 连接端口为2222的服务器
ssh user@server.com -p 2222# 使用特定私钥连接
ssh -i ~/.ssh/custom_key.pem user@server.com# 详细输出模式(调试用)
ssh -v user@server.com

三、核心配置文件修改(重点!)

1. 进入配置文件目录

cd /etc/ssh/
# 先备份原配置文件(防止改崩)
cp sshd_config sshd_config.bak
# 设置配置文件权限(仅root可写)
chmod 600 sshd_config

2. 常用安全配置修改(用 vi/vim 编辑)

vim sshd_config

推荐修改项(取消注释并修改):

# 修改默认端口(避免被暴力破解)
Port 2222# 禁止root用户直接登录(提高安全性)
PermitRootLogin no# 启用密钥认证(更安全)
PubkeyAuthentication yes# 禁止密码认证(配合密钥认证使用)
PasswordAuthentication no# 限制可登录用户(多个用户用空格分隔)
AllowUsers admin devops backup# 限制最大尝试次数(防暴力破解)
MaxAuthTries 3# 设置空闲超时时间(单位秒)
ClientAliveInterval 300
ClientAliveCountMax 0# 禁用DNS反向解析(加快连接速度)
UseDNS no# 限制协议版本(禁用不安全的SSHv1)
Protocol 2# 限制同时会话数
MaxSessions 5# 禁用X11转发(除非需要)
X11Forwarding no

3. 重启服务使配置生效

# 检查配置语法是否正确
sshd -t
# 重启服务
systemctl restart sshd
# 查看服务状态
systemctl status sshd

四、密钥认证配置(生产环境必学)

1. 本地生成密钥对(Mac/Linux 终端)

# 生成RSA密钥对(推荐4096位)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# 或者生成更安全的Ed25519密钥
ssh-keygen -t ed25519 -a 100# 生成过程中会提示:
# 密钥保存路径(默认~/.ssh/id_rsa)
# 设置密钥密码(可选但推荐)
# 确认密钥密码# 生成后会在~/.ssh目录下产生:
# id_rsa(私钥,必须保密)
# id_rsa.pub(公钥,可公开)
# 若指定了其他名称,如custom_key,则生成custom_key和custom_key.pub# 设置私钥权限
chmod 600 ~/.ssh/id_rsa

2. 上传公钥到服务器

# 方法一:使用ssh-copy-id自动上传
# 格式:ssh-copy-id -p 端口 用户名@服务器IP
ssh-copy-id -p 2222 admin@192.168.1.100
# 输入密码后自动将公钥添加到服务器~/.ssh/authorized_keys# 方法二:手动上传(当ssh-copy-id不可用时)
# 1. 将公钥内容复制到剪贴板
cat ~/.ssh/id_rsa.pub | pbcopy  # Mac
cat ~/.ssh/id_rsa.pub | xclip -selection clipboard  # Linux# 2. 登录服务器,编辑authorized_keys文件
mkdir -p ~/.ssh
chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
vim ~/.ssh/authorized_keys
# 粘贴公钥内容并保存

3. 无密码登录测试

ssh admin@192.168.1.100 -p 2222
# 若设置了密钥密码,则需要输入密钥密码
# 无需输入服务器用户密码即配置成功

五、常见问题解决方案

⚠️ 连接被拒绝

# 1. 检查服务器SSH服务是否启动
systemctl status sshd# 2. 检查防火墙是否放行端口
firewall-cmd --list-all
# 或者
iptables -L -n# 放行端口示例(以2222为例)
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --reload# 3. 检查SELinux是否阻止SSH
sestatus
# 临时关闭SELinux(测试用)
setenforce 0
# 永久关闭(不推荐生产环境)
vim /etc/selinux/config
# 修改SELINUX=disabled# 4. 检查网络连通性
ping 192.168.1.100
traceroute 192.168.1.100
telnet 192.168.1.100 2222# 5. 检查端口是否监听
netstat -tulnp | grep ssh
ss -tulnp | grep ssh

⚠️ 密码登录失败

# 1. 检查sshd_config配置
grep PasswordAuthentication /etc/ssh/sshd_config# 2. 检查用户密码是否正确
passwd admin# 3. 检查PAM模块限制
vim /etc/pam.d/sshd# 4. 检查用户shell是否被禁用
vim /etc/passwd
# 确保用户shell为/bin/bash或/bin/sh# 5. 检查用户是否被锁定
passwd -S admin# 6. 查看详细日志
journalctl -xe
tail -f /var/log/secure

六、进阶安全设置(运维必看)

限制 IP 访问(通过防火墙只允许特定 IP 连接)

# 使用firewalld限制IP访问
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.1.10' port protocol='tcp' port='2222' accept"
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='10.0.0.0/24' port protocol='tcp' port='2222' accept"
firewall-cmd --permanent --remove-service=ssh
firewall-cmd --reload# 或者使用iptables
iptables -A INPUT -p tcp --dport 2222 -s 192.168.1.10 -j ACCEPT
iptables -A INPUT -p tcp --dport 2222 -j DROP
service iptables save

启用 TCP Wrappers(更精细的访问控制)

# 在/etc/hosts.allow添加允许的IP
echo "sshd: 192.168.1.0/24" >> /etc/hosts.allow
echo "sshd: 10.0.0.5" >> /etc/hosts.allow# 在/etc/hosts.deny添加拒绝的IP
echo "sshd: ALL" >> /etc/hosts.deny# 检查配置是否生效
tcpdchk

设置登录失败锁定(防暴力破解)

# 安装fail2ban
yum install epel-release -y
yum install fail2ban -y
systemctl start fail2ban
systemctl enable fail2ban# 配置fail2ban
vim /etc/fail2ban/jail.local

添加以下内容:

[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/secure
maxretry = 3
findtime = 300
bantime = 3600
ignoreip = 127.0.0.1 192.168.1.0/24

重启服务:

systemctl restart fail2ban
# 查看被ban的IP
fail2ban-client status sshd

💡 新手避坑指南

  1. 配置前先备份

    cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
    

  2. 生产环境安全规范

    • 严禁使用 root + 密码登录
    • 密钥认证 + 普通用户 sudo 是标配
    • 定期更新 SSH 软件版本:yum update openssh-server
    • 禁用不安全的加密算法(在sshd_config中添加)
      Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
      MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com
      

  3. 端口修改注意事项

    • 先确认新端口能连接,再关闭旧端口
    • 修改后立即测试:ssh -p 新端口 用户名@IP
    • 确保防火墙和SELinux允许新端口
  4. 密钥管理

    • 私钥必须设置600权限:chmod 600 ~/.ssh/id_rsa
    • 定期轮换密钥对(建议每3-6个月)
    • 使用密钥密码增加安全性
    • 备份密钥对到安全位置
  5. 其他建议

    • 启用双因素认证(如Google Authenticator)
    • 定期检查登录日志:lastlastb
    • 配置SSH会话超时:TMOUT=300(添加到/etc/profile)

📚 实用命令速查表

操作场景命令示例
查看 SSH 状态systemctl status sshd
重启 SSH 服务systemctl restart sshd
查看 SSH 日志tail -f /var/log/securejournalctl -u sshd
生成密钥对ssh-keygen -t rsa -b 4096
上传公钥ssh-copy-id -p 2222 user@server
测试密钥登录ssh -p 2222 -i ~/.ssh/id_rsa user@server
查看当前登录用户whow
查看登录历史lastlastb
查看SSH连接`netstat -tnpa
检查SSH配置sshd -t
查看SSH版本ssh -V
强制断开SSH会话pkill -9 -t pts/0

掌握这些技能后,再也不用怕服务器远程管理啦!记得收藏这篇教程,配置时遇到问题可以随时对照~ 你们在配置 SSH 时遇到过哪些奇葩问题?评论区一起交流呀~

http://www.dtcms.com/a/263008.html

相关文章:

  • HarmonyOS NEXT应用元服务常见列表操作多类型列表项场景
  • 2025年数字信号、计算机通信与软件工程国际会议(DSCCSE 2025)
  • Excel 如何让表看起来更清晰、专业,而不是花里胡哨?
  • 低功耗MM32L0180系列MCU
  • 【Kafka】docker 中配置带 Kerberos 认证的 Kafka 环境(全过程)
  • [springboot系列] 探秘 JUnit 5:现代 Java 单元测试利器
  • Spring Boot 实现不同用户不同访问权限
  • 基于uniapp的老年皮肤健康管理微信小程序平台(源码+论文+部署+安装+售后)
  • 跨时间潜运动迁移以实现操作中的多帧预测
  • Instrct-GPT 强化学习奖励模型 Reward modeling 的训练过程原理实例化详解
  • nifi1.28.1集群部署详细记录
  • 大语言模型LLM在训练/推理时的padding
  • 用户行为序列建模(篇十一)-小结篇(篇一)
  • 如何读取运行jar中引用jar中的文件
  • C++ --- list
  • 《Effective Python》第十一章 性能——使用 timeit 微基准测试优化性能关键代码
  • 分发糖果
  • Spring Boot 集成 tess4j 实现图片识别文本
  • Springboot + vue + uni-app小程序web端全套家具商场
  • Serverless 架构入门与实战:AWS Lambda、Azure Functions、Cloudflare Workers 对比
  • 人工智能参与高考作文写作的实证研究
  • 华为物联网认证:开启万物互联的钥匙
  • 设计模式-观察者模式(发布订阅模式)
  • YOLOv12_ultralytics-8.3.145_2025_5_27部分代码阅读笔记-torch_utils.py
  • 现代JavaScript前端开发概念
  • spring-ai-alibaba官方 Playground 示例
  • 使用pyflink进行kafka实时数据消费
  • 电脑开机加速工具,优化启动项管理
  • 【Unity】MiniGame编辑器小游戏(七)贪吃蛇【Snake】
  • Java项目:基于SSM框架实现的云端学习管理系统【ssm+B/S架构+源码+数据库+毕业论文】