在Linux系统中,开启SSH密钥登陆能够显著提升服务器安全性,相比传统密码登陆,密钥认证基于非对称加密,有效避免暴力破解风险,同时实现免密快速登陆,以下是详细的配置步骤,涵盖本地密钥生成、服务器端配置及安全加固全流程。
本地客户端生成SSH密钥对
SSH密钥对包含公钥(用于上传至服务器)和私钥(需妥善保存在客户端),以Linux/macOS客户端为例,使用ssh-keygen
命令生成密钥:
-
执行密钥生成命令
打开终端,运行以下命令(推荐使用Ed25519算法,安全性高于传统RSA):ssh-keygen -t ed25519 -C "your_email@example.com"
若需兼容旧系统,可使用RSA算法(2048位以上):
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
-
设置密钥存储路径和密码
命令执行后,会提示以下信息:Enter file in which to save the key
:直接按回车,默认保存到~/.ssh/id_ed25519
(私钥)和~/.ssh/id_ed25519.pub
(公钥);Enter passphrase
:设置私钥密码(建议设置,防止私钥泄露被滥用),若无需密码可留空(不推荐)。
完成后,
~/.ssh/
目录下会生成两个文件:id_ed25519
:私钥,绝不能泄露或上传至服务器;id_ed25519.pub
:公钥,需上传至服务器。
将公钥上传至Linux服务器
使用ssh-copy-id
命令(推荐)
客户端已安装SSH工具时,此命令可自动将公钥追加至服务器~/.ssh/authorized_keys
文件:
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip
执行后输入服务器用户密码,即可完成上传。
手动上传公钥
若ssh-copy-id
不可用(如Windows客户端),可通过以下步骤操作:
- 在客户端查看公钥内容:
cat ~/.ssh/id_ed25519.pub
- 在服务器端创建SSH目录并授权:
mkdir -p ~/.ssh chmod 700 ~/.ssh
- 追加至
authorized_keys
文件:echo "客户端公钥内容" >> ~/.ssh/authorized_keys
- 设置文件权限:
chmod 600 ~/.ssh/authorized_keys
服务器端SSH服务配置
编辑SSH配置文件
使用文本编辑器(如vi
或nano
)打开SSH主配置文件:
sudo vi /etc/ssh/sshd_config
关键配置项修改
确保以下配置项正确设置(可结合下表调整):
配置项 | 默认值 | 建议值 | 说明 |
---|---|---|---|
PubkeyAuthentication | yes | yes | 开启密钥认证(必须启用) |
PasswordAuthentication | yes | no | 禁用密码认证(建议测试成功后再修改,避免无法远程访问) |
PermitRootLogin | prohibit-password | no | 禁止root用户直接通过SSH登陆(提升安全性) |
AuthorizedKeysFile | .ssh/authorized_keys | .ssh/authorized_keys | 指定公钥存储路径(默认无需修改) |
Port | 22 | 自定义端口 | 修改SSH端口(避免默认端口被扫描,如2222) |
注意事项:
- 修改
PermitRootLogin
时,若需root权限,建议通过普通用户sudo
操作,而非直接root登陆; - 若修改
Port
,需确保防火墙开放新端口(如sudo ufw allow 2222
)。
保存并退出配置文件
vi
中按Esc
输入wq
保存。
设置目录和文件权限(关键步骤)
SSH服务对权限敏感,若权限不当,会导致密钥认证失败,需确保以下权限设置:
# 设置SSH目录权限(仅用户可读写执行) chmod 700 ~/.ssh # 设置authorized_keys文件权限(仅用户可读写) chmod 600 ~/.ssh/authorized_keys
常见问题:若权限错误,服务器日志(/var/log/auth.log
或/var/log/secure
)会提示“Permission denied”或“Bad owner or permissions”。
重启SSH服务使配置生效
根据系统类型执行对应命令:
- Systemd系统(Ubuntu 16.04+/CentOS 7+):
sudo systemctl restart sshd
- Upstart系统(Ubuntu 14.04等):
sudo service ssh restart
测试密钥登陆
- 关闭当前终端窗口,避免残留会话影响;
- 重新连接服务器:
ssh user@server_ip
若设置私钥密码,需输入密码;否则直接进入服务器,表示密钥认证成功。
禁用密码登陆(可选但推荐)
测试通过后,为提升安全性,可彻底禁用密码登陆:
- 再次编辑
/etc/ssh/sshd_config
,将PasswordAuthentication
修改为no
; - 重启SSH服务:
sudo systemctl restart sshd
警告:禁用密码前,务必确认密钥登陆正常,否则可能导致无法远程访问服务器(需通过控制台恢复)。
FAQs
Q1:忘记SSH私钥的passphrase怎么办?
A:私钥的passphrase用于加密私钥文件,若忘记无法直接破解,建议:
- 若有私钥备份(如通过
ssh-keygen -p
修改密码前的备份),尝试恢复; - 若无备份,需重新生成密钥对,并重新上传公钥至服务器;
- 为避免遗忘,可将passphrase保存在安全的位置(如密码管理器)。
Q2:无法使用密钥登陆,提示“Permission denied (publickey,password)”如何解决?
A:常见原因及排查步骤:
- 检查公钥是否正确上传:在服务器端执行
cat ~/.ssh/authorized_keys
,确认客户端公钥内容存在; - 检查权限设置:确保
~/.ssh
目录权限为700,authorized_keys
文件权限为600; - 检查SSH配置:确认
/etc/ssh/sshd_config
中PubkeyAuthentication
为yes
; - 查看服务器日志:通过
grep sshd /var/log/auth.log
(Ubuntu)或grep sshd /var/log/secure
(CentOS)定位错误信息(如权限错误、配置语法错误等)。
通过以上步骤,即可完成Linux系统SSH密钥登陆的配置,密钥认证不仅更安全,还能简化登陆流程,适合需要频繁远程服务器的场景,配置时务必注意权限和备份,避免因操作失误导致无法访问服务器。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/21307.html