Ubuntu系统配置SSH私钥认证
在Ubuntu系统中配置SSH私钥认证,可实现免密码登录并提升安全性
一、生成SSH密钥对
-
执行密钥生成命令
终端输入以下命令(推荐RSA算法,4096位长度):ssh-keygen -t rsa -b 4096 -C "your_email@example.com"-C参数用于添加注释(如邮箱),便于标识密钥用途。- 系统会提示保存路径(默认
~/.ssh/id_rsa),建议直接回车使用默认值。 - 设置私钥密码(Passphrase)(可选但推荐):若担心私钥泄露,可设置额外密码保护。
-
查看生成的密钥文件
生成完成后,~/.ssh目录下会出现两个文件:id_rsa:私钥(需严格保密)id_rsa.pub:公钥(需上传到服务器)
二、上传公钥到远程服务器
方法1:使用ssh-copy-id(推荐)
ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote_host
- 输入服务器密码后,公钥会自动追加到服务器端的
~/.ssh/authorized_keys文件中。
方法2:手动复制公钥
若ssh-copy-id不可用,可通过以下命令完成:
ssh user@remote_host "mkdir -p ~/.ssh && chmod 700 ~/.ssh"
cat ~/.ssh/id_rsa.pub | ssh user@remote_host "cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
- 分步创建目录并设置权限,避免因权限问题导致认证失败。
三、配置SSH服务器
-
修改SSH配置文件
登录服务器,编辑/etc/ssh/sshd_config:sudo nano /etc/ssh/sshd_config确保以下参数已启用:
PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys PasswordAuthentication no # 禁用密码登录以增强安全性 -
重启SSH服务
sudo systemctl restart ssh
四、测试私钥认证登录
ssh -i ~/.ssh/id_rsa user@remote_host
- 若未设置Passphrase,可直接登录;若设置了Passphrase,需输入私钥密码。
- 成功登录后,说明私钥认证已生效。
五、优化操作(可选)
-
使用SSH Agent管理私钥
- 启动Agent并添加私钥:
eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_rsa # 输入一次Passphrase后,后续会话无需重复输入 - 验证已加载的密钥:
ssh-add -l
- 启动Agent并添加私钥:
-
配置SSH客户端简化命令
在本地~/.ssh/config中添加:Host remote_alias HostName remote_host_ip User user Port 2222 # 若服务器修改了SSH端口 IdentityFile ~/.ssh/id_rsa之后可直接用
ssh remote_alias连接。
注意事项
- 权限设置:服务器端
.ssh目录权限应为700,authorized_keys文件权限为600。 - 备份私钥:私钥丢失将导致无法登录,建议备份至安全位置。
- 多密钥管理:若需为不同服务器使用不同密钥,可通过
-i参数指定私钥路径,或在~/.ssh/config中配置多主机规则。
通过以上步骤,实现基于密钥的安全SSH认证,既避免了密码泄露风险,又简化了登录流程。若需进一步强化安全,可结合防火墙限制SSH端口访问或启用双因素认证。

浙公网安备 33010602011771号