简介
本文介绍了 如何配置 UBUNTU/DEBIAN 使用SSH密钥进行登录
客户端
生成密钥
ssh-keygen -t ed25519 -C "你的注释,比如 mac-2026"
默认写入 ~/.ssh/id_ed25519(私钥)和 ~/.ssh/id_ed25519.pub(公钥)。
强烈建议设置 passphrase:这是私钥文件被盗后的最后一道防线。 如果当初没设 passphrase,可以事后补上:
ssh-keygen -p -f ~/.ssh/id_ed25519
公钥分发到服务器
ssh-copy-id方案
ssh-copy-id user@server
# 指定具体公钥:
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server
成功后会显示 Number of key(s) added: 1,表示公钥已追加到你当前登录的那个用户的 authorized_keys。
手动方案
把本地 ~/.ssh/id_ed25519.pub 的整行内容贴到服务器:
# 在服务器上,以目标用户身份执行:
mkdir -p ~/.ssh
echo "ssh-ed25519 AAAA....your-pubkey.... 注释" >> ~/.ssh/authorized_keys
注意事项
sshd 出于安全考虑,权限过于开放时会拒绝读取 authorized_keys,且默认不会明说原因。务必保证:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 750 ~ # 家目录不能对组/其他用户可写
服务端
检查服务器是否允许公钥认证
sshd -T | grep -iE 'pubkey|permitroot|password|authorizedkeysfile'
理想结果应包含:
pubkeyauthentication yes
如果看到的是 pubkeyauthentication no,就是不允许公钥登录。
部分 VPS 出厂镜像会默认关掉公钥、只留密码登录。我们需要修改下配置,我这里给了一个一句话脚本,方便大家使用。
cp /etc/ssh/sshd_config{,.bak} && sed -i -E 's/^\s*#?\s*PubkeyAuthentication.*/PubkeyAuthentication yes/I' /etc/ssh/sshd_config && grep -qi '^PubkeyAuthentication' /etc/ssh/sshd_config || echo "PubkeyAuthentication yes" >> /etc/ssh/sshd_config; sshd -t && (systemctl reload ssh 2>/dev/null || systemctl reload sshd) && sshd -T | grep -i pubkeyauthentication
验证登录
使用命令,来诊断登录
ssh -v user@server
如果没错误,以后就可以
ssh user@server
来进行登录了
如果有需要,可以关闭ssh的密码登陆,方案如下。(关闭密码登陆之前请确认密钥登录没有问题哦)
cp /etc/ssh/sshd_config{,.bak} && sed -i -E 's/^\s*#?\s*PasswordAuthentication.*/PasswordAuthentication no/I' /etc/ssh/sshd_config && grep -qi '^PasswordAuthentication' /etc/ssh/sshd_config || echo "PasswordAuthentication no" >> /etc/ssh/sshd_config; sshd -t && (systemctl reload ssh 2>/dev/null || systemctl reload sshd) && sshd -T | grep -i passwordauthentication