配置服务器SSH登录的核心是修改sshd_config文件、启用密钥认证并禁用密码登录,同时配合防火墙规则限制访问来源。
下面我从零开始,一步步带你完成SSH登录配置,包括基础安装、密钥设置、云服务器差异以及安全强化。
如何配置SSH登录服务器?从基础到安全
安装并启动SSH服务
大多数Linux服务器默认安装OpenSSH,可以通过以下命令检查状态:
sudo systemctl status sshd
如果未安装,使用包管理器安装:
- Debian/Ubuntu:
sudo apt update && sudo apt install openssh-server - CentOS/RHEL:
sudo yum install openssh-server
安装后,启动服务并设置开机自启:
sudo systemctl start sshd
sudo systemctl enable sshd
创建普通用户并配置sudo权限
为了安全,建议不要直接使用root操作,创建一个普通用户:参考2
sudo adduser myuser
并赋予sudo权限(Ubuntu):
sudo usermod -aG sudo myuser
CentOS将用户加入wheel组:
sudo usermod -aG wheel myuser
修改sshd_config文件
核心配置文件是/etc/ssh/sshd_config,修改前备份:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
使用编辑器打开,修改以下参数:
- Port 22 → 改为自定义端口,如
Port 2222,减少被扫描风险。 - PermitRootLogin yes → 改为
PermitRootLogin no,禁止root直接登录。 - PasswordAuthentication yes → 暂时保持yes,等密钥配置好后改为no。
- PubkeyAuthentication yes → 确保启用。
修改后,用sudo sshd -t检查语法是否正确,然后重启服务:
sudo systemctl restart sshd
配置防火墙或安全组
如果服务器使用防火墙,需要放行新端口:
- 使用ufw(Ubuntu):
sudo ufw allow 2222/tcp - 使用firewalld(CentOS):
sudo firewall-cmd --permanent --add-port=2222/tcp && sudo firewall-cmd --reload - 使用iptables:
sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT(注意保存规则)
如果是云服务器,还需要在安全组添加入站规则,允许自定义TCP端口。
测试连接
从客户端执行:
ssh -p 2222 myuser@your_server_ip
如果成功,基础配置完成,如果连接失败,检查防火墙是否放行,以及sshd是否正常运行。
使用SSH Config文件简化连接
在客户端创建~/.ssh/config,配置:
Host myserver
HostName your_server_ip
Port 2222
User myuser
IdentityFile ~/.ssh/id_ed25519
之后只需执行ssh myserver即可连接,不需要每次输入IP和端口。
SSH登录服务器密钥配置与密码配置对比
密码登录虽然简单,但安全性较低,密钥认证使用公钥和私钥,安全性更高。
生成密钥对
在客户端执行:
ssh-keygen -t ed25519 -a 100
也可以使用RSA:ssh-keygen -t rsa -b 4096,建议设置密码短语(passphrase),为私钥增加一层保护。参考2
部署公钥
使用ssh-copy-id将公钥复制到服务器:
ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 myuser@your_server_ip
如果该命令不可用,手动复制公钥内容到服务器~/.ssh/authorized_keys文件,并设置权限600。
测试密钥登录
执行:
ssh -p 2222 myuser@your_server_ip
如果无需密码直接登录,说明密钥认证成功,此时可以禁用密码登录:在sshd_config中设置PasswordAuthentication no,重启服务。
密钥管理注意事项
- 私钥文件权限必须为
600,否则SSH会拒绝使用。 - 建议使用密码短语保护私钥,但每次使用需要输入,可以用
ssh-agent缓存。 - 如果私钥丢失,需要重新生成并部署新公钥,同时移除旧公钥。
- 多个服务器可以复用同一个密钥对,但建议每个服务器使用不同密钥,便于撤销。
对比分析
| 特性 | 密码认证 | 密钥认证 |
|---|---|---|
| 安全性 | 较低,易受暴力破解 | 较高,依赖密钥文件 |
| 便利性 | 记住密码即可 | 需要管理密钥文件 |
| 配置难度 | 无需额外配置 | 需要生成和部署密钥 |
| 推荐场景 | 临时、低安全环境 | 生产环境、高安全要求 |
行业共识认为,密钥认证应作为SSH登录的首选方式,多数情况下,使用密钥认证能显著降低被入侵的风险。
云服务器SSH登录配置实战
云服务器厂商如简米云、酷番云、AWS,在创建实例时通常提供密钥对选项,如果选择密钥对,会自动配置公钥,你只需下载私钥,初次登录时:
ssh -i /path/to/private_key -p 22 user@public_ip
安全组配置
云服务器安全组相当于虚拟防火墙,需要添加入站规则:
- 简米云:在安全组中,添加自定义TCP,端口为你的SSH端口,授权对象为你的IP(如
x.x.x.x/32)。 - 酷番云:类似,添加规则,来源为你的IP,协议端口为TCP:22(或自定义端口)。
- AWS:在安全组中,添加入站规则,类型为SSH,源为你的IP。
如果修改了端口,记得同步更新安全组规则。
SSH连接排查步骤
当连接失败时,按以下顺序排查:
- 检查安全组规则是否放行了端口。
- 检查服务器防火墙是否放行,
sudo ufw status或sudo firewall-cmd --list-all。 - 检查SSH服务状态:
sudo systemctl status sshd。 - 检查密钥文件权限:
ls -l ~/.ssh/id_ed25519,应为-rw-------。 - 查看认证日志:
sudo tail -f /var/log/auth.log,定位具体错误。
使用fail2ban防护
fail2ban能自动阻止多次失败的登录尝试,安装:
sudo apt install fail2ban # Ubuntu
sudo yum install fail2ban # CentOS
配置/etc/fail2ban/jail.local,添加:参考2
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600
重启fail2ban:sudo systemctl restart fail2ban,这样,多次尝试登录失败的用户会被暂时封禁。
业内专家指出,云服务器安全配置中,SSH管理是重中之重,建议使用密钥认证并配合fail2ban等工具。
国内服务器SSH登录配置常见问题与优化
国内服务器用户常面临的问题包括:默认端口22被频繁扫描,弱密码容易被攻破,网络不稳定导致连接断开。
更换端口
修改sshd_config中的Port为不常用端口,如2222、10022等,同时更新防火墙和安全组规则。
限制IP访问
通过防火墙只允许你信任的IP连接:
sudo iptables -A INPUT -p tcp --dport 2222 -s your_ip -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 2222 -j DROP
使用ufw:sudo ufw allow from your_ip to any port 2222 proto tcp
使用AllowUsers
在sshd_config中添加:
AllowUsers myuser
只允许特定用户登录,其他用户即使有密钥也无法连接。
配置KeepAlive
避免空闲连接断开:
ClientAliveInterval 60
ClientAliveCountMax 3
常见误区
- 误认为修改端口后就绝对安全,实际上还需要禁用密码登录和限制IP。
- 只使用密钥但忘记设置私钥权限,导致登录失败。
- 修改sshd_config后未重启服务,导致配置不生效。
综合优化
建议同时启用密钥认证、禁用密码登录、更换端口、限制IP,如果考虑SSH登录服务器配置价格,这些措施几乎零成本,但能大幅提升安全性。
国内服务器如果使用云厂商,Web控制台通常提供远程连接功能,可以作为应急备用通道。
SSH登录服务器配置常见问题解答
问题1:SSH登录失败,提示”Permission denied (publickey)”怎么办?
检查公钥是否已添加到authorized_keys,确认sshd_config中PubkeyAuthentication设为yes,并重启服务,私钥文件权限必须为600,且所属用户正确。
问题2:我改了端口后SSH连不上了,如何处理?
如果当前会话还在,不要退出,先测试新端口,如果已断开,通过云控制台VNC或物理控制台登录,检查sshd_config错误或防火墙是否放行,建议保留至少一个管理通道。
问题3:密码登录和密钥登录哪个更便宜?
从直接成本看,两者均无额外费用,但密钥登录能避免因密码泄露导致的数据损失,长期来看性价比更高,多数情况下,推荐使用密钥登录。
通过以上配置,你的服务器SSH登录将更加安全可靠,检查你的服务器,确保配置符合最佳实践,避免因配置不当带来的风险。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/527460.html



