CentOS服务器SSH远程连接全指南_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 工具)
- 从官网 Download PuTTY - a free SSH and telnet client for Windows 下载 PuTTY
- 运行 PuTTY,在\"Host Name (or IP address)\"输入服务器 IP
- 在\"Port\"输入 SSH 端口(默认 22)
- 点击\"Open\"按钮连接
- 首次连接会弹出安全警告窗口(\"The server\'s host key is not cached\"),点击\"是\"保存服务器指纹
- 在终端窗口输入用户名和密码完成登录
- 可选:保存会话配置方便下次连接
▶ 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 300ClientAliveCountMax 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 端口 用户名@服务器IPssh-copy-id -p 2222 admin@192.168.1.100# 输入密码后自动将公钥添加到服务器~/.ssh/authorized_keys# 方法二:手动上传(当ssh-copy-id不可用时)# 1. 将公钥内容复制到剪贴板cat ~/.ssh/id_rsa.pub | pbcopy # Maccat ~/.ssh/id_rsa.pub | xclip -selection clipboard # Linux# 2. 登录服务器,编辑authorized_keys文件mkdir -p ~/.sshchmod 700 ~/.sshtouch ~/.ssh/authorized_keyschmod 600 ~/.ssh/authorized_keysvim ~/.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/tcpfirewall-cmd --reload# 3. 检查SELinux是否阻止SSHsestatus# 临时关闭SELinux(测试用)setenforce 0# 永久关闭(不推荐生产环境)vim /etc/selinux/config# 修改SELINUX=disabled# 4. 检查网络连通性ping 192.168.1.100traceroute 192.168.1.100telnet 192.168.1.100 2222# 5. 检查端口是否监听netstat -tulnp | grep sshss -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 -xetail -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=sshfirewall-cmd --reload# 或者使用iptablesiptables -A INPUT -p tcp --dport 2222 -s 192.168.1.10 -j ACCEPTiptables -A INPUT -p tcp --dport 2222 -j DROPservice iptables save
启用 TCP Wrappers(更精细的访问控制)
# 在/etc/hosts.allow添加允许的IPecho \"sshd: 192.168.1.0/24\" >> /etc/hosts.allowecho \"sshd: 10.0.0.5\" >> /etc/hosts.allow# 在/etc/hosts.deny添加拒绝的IPecho \"sshd: ALL\" >> /etc/hosts.deny# 检查配置是否生效tcpdchk
设置登录失败锁定(防暴力破解)
# 安装fail2banyum install epel-release -yyum install fail2ban -ysystemctl start fail2bansystemctl enable fail2ban# 配置fail2banvim /etc/fail2ban/jail.local
添加以下内容:
[sshd]enabled = trueport = 2222filter = sshdlogpath = /var/log/securemaxretry = 3findtime = 300bantime = 3600ignoreip = 127.0.0.1 192.168.1.0/24
重启服务:
systemctl restart fail2ban# 查看被ban的IPfail2ban-client status sshd
💡 新手避坑指南
-
配置前先备份:
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
-
生产环境安全规范:
- 严禁使用 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-ctrMACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com
-
端口修改注意事项:
- 先确认新端口能连接,再关闭旧端口
- 修改后立即测试:
ssh -p 新端口 用户名@IP
- 确保防火墙和SELinux允许新端口
-
密钥管理:
- 私钥必须设置600权限:
chmod 600 ~/.ssh/id_rsa
- 定期轮换密钥对(建议每3-6个月)
- 使用密钥密码增加安全性
- 备份密钥对到安全位置
- 私钥必须设置600权限:
-
其他建议:
- 启用双因素认证(如Google Authenticator)
- 定期检查登录日志:
last
和lastb
- 配置SSH会话超时:
TMOUT=300
(添加到/etc/profile)
📚 实用命令速查表
systemctl status sshd
systemctl restart sshd
tail -f /var/log/secure
或 journalctl -u sshd
ssh-keygen -t rsa -b 4096
ssh-copy-id -p 2222 user@server
ssh -p 2222 -i ~/.ssh/id_rsa user@server
who
或 w
last
和 lastb
sshd -t
ssh -V
pkill -9 -t pts/0
掌握这些技能后,再也不用怕服务器远程管理啦!记得收藏这篇教程,配置时遇到问题可以随时对照~ 你们在配置 SSH 时遇到过哪些奇葩问题?评论区一起交流呀~