引言
在IT外包服务与企业运维实践中,SSH(Secure Shell)是管理Linux服务器最核心的协议。然而,默认的基于密码的身份验证方式存在严重的安全隐患,容易遭受暴力破解攻击。采用SSH密钥对进行身份验证,不仅能大幅提升连接安全性,还能简化自动化脚本的执行流程。本文将详细介绍配置SSH密钥登录并禁用密码认证的完整步骤。
第一步:生成SSH密钥对
首先,需要在客户端机器(通常是管理员的工作站或跳板机)上生成私钥和公钥。推荐使用Ed25519算法,因其安全性高且性能好;若需兼容旧版本系统,可使用RSA算法。
1. 打开终端
在Linux/macOS系统中打开终端,在Windows系统中可使用Git Bash或OpenSSH客户端。
2. 执行生成命令
Ed25519算法推荐:
ssh-keygen -t ed25519 -C "your_email@example.com"
RSA算法备选:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
执行后,系统会提示保存路径(默认~/.ssh/id_ed25519或id_rsa),直接回车即可。接着会要求设置密码短语(Passphrase),建议设置高强度密码以增强私钥保护,若希望免密登录可留空。
第二步:部署公钥至服务器
生成密钥对后,需要将公钥内容复制到目标Linux服务器的authorized_keys文件中。
方法一:使用ssh-copy-id命令(推荐)
这是最简单且自动处理权限的方法:
ssh-copy-id username@server_ip
输入服务器密码后,公钥将自动追加到~/.ssh/authorized_keys中。
方法二:手动复制
若无法使用ssh-copy-id,可手动操作:
- 查看并复制公钥内容:
cat ~/.ssh/id_ed25519.pub - 通过SSH登录服务器:
ssh username@server_ip - 在服务器上创建目录并设置权限:
mkdir -p ~/.ssh && chmod 700 ~/.ssh - 将公钥内容追加到authorized_keys:
echo "公钥内容" >> ~/.ssh/authorized_keys - 设置文件权限:
chmod 600 ~/.ssh/authorized_keys
第三步:验证密钥登录
在禁用密码前,务必验证密钥登录是否正常工作。
尝试连接服务器:
ssh username@server_ip
如果设置了密码短语,系统会提示输入 passphrase。若能成功进入服务器命令行,说明配置无误。**注意:此时不要关闭当前终端窗口**,建议新开一个窗口进行后续测试,以防配置失误导致无法连接。
第四步:禁用SSH密码登录
确认密钥登录后,需修改服务器端的SSH配置文件以禁用密码验证,从而彻底杜绝暴力破解风险。
1. 编辑sshd_config
使用文本编辑器打开配置文件:
sudo vi /etc/ssh/sshd_config
2. 修改关键参数
找到并修改以下行(若无则手动添加):
- PermitRootLogin:建议设为
prohibit-password或no,禁止root账户远程登录。 - PasswordAuthentication:设为
no,禁用密码认证。 - PubkeyAuthentication:确保设为
yes,启用公钥认证。 - ChallengeResponseAuthentication:设为
no,禁用挑战响应认证(通常用于键盘交互式密码)。
3. 重启SSH服务
保存退出后,重启SSH服务使配置生效:
sudo systemctl restart sshd
若使用Ubuntu/Debian,服务名为ssh;若使用CentOS/RHEL,服务名为sshd。
第五步:安全加固与故障排除
常见故障:Permission denied (publickey)
如果遇到此错误,请检查以下几点:
- 权限问题:服务器上的~/.ssh目录权限必须为700,authorized_keys权限必须为600。私钥在客户端也必须为600(
chmod 600 ~/.ssh/id_ed25519)。 - SELinux/AppArmor:某些Linux发行版启用了强制访问控制,可能阻止SSH读取密钥。可使用
restorecon -Rv ~/.ssh修复上下文。 - 用户家目录权限:确保用户的主目录权限不是777或其他开放权限,否则SSH会拒绝使用密钥。
额外建议:更改SSH端口
除了禁用密码,修改默认端口22也能减少大部分自动化扫描攻击。在sshd_config中修改 Port 2222,并在防火墙中相应放行。
结语
通过实施SSH密钥登录并禁用密码认证,企业IT环境的安全基线得到了显著提升。这一配置虽然简单,但却是防御横向移动和外部入侵的第一道坚实防线。定期审查SSH配置和密钥权限,是IT运维人员不可忽视的安全习惯。