Ubuntu使用SSH密钥认证的完整步骤
在本地Ubuntu机器上生成密钥对(私钥+公钥),是密钥认证的基础。
打开终端,运行以下命令:
ssh-keygen -t ed25519 -C "your_email@example.com"
-t ed25519:推荐使用Ed25519算法(更安全、性能更好),若系统不支持可改用-t rsa -b 4096(RSA算法,4096位长度)。-C "your_email@example.com":添加注释,用于标识密钥用途(如个人邮箱)。~/.ssh/id_ed25519(私钥)和~/.ssh/id_ed25519.pub(公钥),直接按Enter使用默认路径。ls -l ~/.ssh/id_*命令查看密钥文件。将本地生成的公钥(id_ed25519.pub或id_rsa.pub)添加到远程服务器的~/.ssh/authorized_keys文件中,实现“钥匙与锁”的匹配。
ssh-copy-id命令(推荐)ssh-copy-id -i ~/.ssh/id_ed25519.pub user@remote_host
-i:指定公钥文件路径(若使用默认路径可省略)。user:远程服务器上的用户名(如ubuntu、root)。remote_host:远程服务器的IP地址或域名(如192.168.1.100、example.com)。~/.ssh/authorized_keys文件中。ssh-copy-id不可用)# 1. 复制本地公钥内容到剪贴板
cat ~/.ssh/id_ed25519.pub | xclip -selection clipboard # 需安装xclip(sudo apt install xclip)
# 或直接打开公钥文件复制内容:cat ~/.ssh/id_ed25519.pub
# 2. 登录远程服务器
ssh user@remote_host
# 3. 在服务器上创建.ssh目录(若不存在)并设置权限
mkdir -p ~/.ssh
chmod 700 ~/.ssh
# 4. 将公钥内容追加到authorized_keys文件
echo "粘贴的公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys # 关键:限制authorized_keys文件权限
注意:authorized_keys文件的权限必须为600(仅所有者可读写),否则SSH会拒绝使用该文件。
修改远程服务器的SSH配置文件,启用密钥认证并优化安全性。
sudo nano /etc/ssh/sshd_config
PubkeyAuthentication yes # 启用公钥认证(默认是yes,可省略)
AuthorizedKeysFile .ssh/authorized_keys # 指定authorized_keys文件路径(默认即可)
PasswordAuthentication no # 禁用密码认证(提升安全性,需确保密钥登录正常后再启用)
# PermitRootLogin prohibit-password # 可选:禁止root用户密码登录(推荐)
sudo systemctl restart ssh # 或sudo service ssh restart(旧版本)
注意:修改配置前建议备份原文件(sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak),避免配置错误导致无法登录。
在本地机器上测试是否能通过密钥登录远程服务器:
ssh user@remote_host
~/.ssh目录权限是否为700,authorized_keys文件权限是否为600。authorized_keys文件中(无换行符或多余字符)。PubkeyAuthentication是否为yes。SSH Agent可缓存私钥密码,避免每次使用密钥时重复输入:
# 1. 启动SSH Agent
eval "$(ssh-agent -s)"
# 2. 添加私钥到Agent(输入私钥密码)
ssh-add ~/.ssh/id_ed25519
# 3. 查看已加载的密钥
ssh-add -l
注意:SSH Agent仅在当前终端会话有效,关闭终端后需重新启动。
编辑本地机器的~/.ssh/config文件(若不存在则创建),添加以下内容:
Host my_server # 自定义别名(如server1)
HostName 192.168.1.100 # 远程服务器IP或域名
User ubuntu # 远程服务器用户名
IdentityFile ~/.ssh/id_ed25519 # 私钥文件路径
使用效果:
之后可直接通过ssh my_server命令登录,无需输入完整参数。
id_ed25519或id_rsa)是登录的关键,切勿泄露给他人。若私钥丢失,需重新生成密钥对并更新服务器端的authorized_keys文件。sudo ufw allow ssh。