远程SSH免密登录
2025/8/16大约 2 分钟
远程SSH免密登录
使用SSH远程连接服务器时,经常需要输入密码。密码简单一点就不安全,密码复杂一点就每次登录都很繁琐。于是找了个偷懒的办法,能够保证密码可以维持复杂度,每次登录也不用很繁琐的去输入密码,针对SSH配置了免密登录设置。
一、将本地公钥上传至服务器
提示
生成密钥使用ssh-keygen命令,如:
ssh-keygen -t rsa -b 4096Windows可以通过type命令打印文件内容,获取公钥内容:
type "%USERPROFILE%\.ssh\id_rsa.pub"然后将公钥内容写入服务器的authorized_keys文件中:
echo "你的公钥内容" >> ~/.ssh/authorized_keys # 追加到文件末尾
#cat 本地公钥文件.pub >> ~/.ssh/authorized_keys # 将公钥追加到 authorized_keys二、调整SSH认证配置
需要在服务器SSH配置文件中,允许公钥登录、禁用密码登录(可选)
sudo nano /etc/ssh/sshd_config保证:
PubkeyAuthentication yes
PasswordAuthentication no # 可选然后重启SSH
sudo systemctl restart sshd三、确保权限问题
重要
权限配置非常重要!!! SSH 对目录和文件的权限有严格要求,过于宽松的权限(如 777)会导致认证失败。SSH 出于安全考虑,要求用户主目录的权限不能对“其他用户”开放写权限(即不能有 w)。如果其他用户可写你的主目录,攻击者可能篡改 .ssh 或 authorized_keys,导致未授权访问。
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys提示
如不想修改权限,可以继续调整SSH认证配置。
StrictModes no四、免密登录和调试
正常情况下,直接ssh即可免密登录
ssh 用户名@服务器IP如果还需要输入密码,通过以下命令开启调试,在客户端定位具体原因:
ssh -vvv 用户名@服务器IP可能会像我一样,显示SSH 客户端尝试使用 .ssh\id_rsa 私钥进行认证,但服务器拒绝了它,并最终回退到密码认证。
服务器端可以使用这个命令查看日志
sudo tail -f /var/log/auth.log比如我这里提示"Authentication refused: bad ownership or modes for directory /home/usrname",明显是权限问题。
