💻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 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
💡 新手避坑指南
配置前先备份:
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-ctr MACs 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)
📚 实用命令速查表
操作场景 | 命令示例 |
---|---|
查看 SSH 状态 | systemctl status sshd |
重启 SSH 服务 | systemctl restart sshd |
查看 SSH 日志 | 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 |
查看SSH连接 | `netstat -tnpa |
检查SSH配置 | sshd -t |
查看SSH版本 | ssh -V |
强制断开SSH会话 | pkill -9 -t pts/0 |
掌握这些技能后,再也不用怕服务器远程管理啦!记得收藏这篇教程,配置时遇到问题可以随时对照~ 你们在配置 SSH 时遇到过哪些奇葩问题?评论区一起交流呀~