LOADING

SSH 免密登录快速指南

SSH 免密登录快速指南

为什么需要免密登录

每次 SSH 登录都要输入密码?管理多台服务器时更痛苦。配置一次免密登录,以后直接 ssh user@host 就能连上,省心省力。

三步搞定

第一步:生成密钥对

在本地机器执行:

ssh-keygen -t ed25519 -C "your_email@example.com"

一路回车即可(默认保存在 ~/.ssh/id_ed25519)。如果想更安全,设置一个 passphrase。

注意:如果系统不支持 ed25519,用 RSA:

ssh-keygen -t rsa -b 4096

第二步:复制公钥到服务器

一条命令搞定:

ssh-copy-id user@remote-server

如果 SSH 端口不是默认 22:

ssh-copy-id -p 2222 user@remote-server

这条命令会把你的公钥追加到服务器的 ~/.ssh/authorized_keys 文件。

第三步:测试连接

ssh user@remote-server

如果不再提示输入密码,恭喜,配置成功!

没有 ssh-copy-id 怎么办

某些系统(如 Windows、部分嵌入式设备)没有 ssh-copy-id,手动复制:

cat ~/.ssh/id_ed25519.pub | ssh user@remote-server "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

或者用 scp:

scp ~/.ssh/id_ed25519.pub user@remote-server:~/
ssh user@remote-server "mkdir -p ~/.ssh && cat ~/id_ed25519.pub >> ~/.ssh/authorized_keys && rm ~/id_ed25519.pub && chmod 600 ~/.ssh/authorized_keys"

管理多台服务器

编辑 ~/.ssh/config,给服务器起别名:

# 开发服务器
Host dev
    HostName 192.168.1.100
    User deploy
    Port 22
    IdentityFile ~/.ssh/id_ed25519

# 生产服务器
Host prod
    HostName 47.94.9.74
    User root
    Port 51990
    IdentityFile ~/.ssh/id_ed25519

配置后直接:

ssh dev    # 连接开发服务器
ssh prod   # 连接生产服务器

常见问题

权限问题

SSH 对权限要求严格,确保:

# 本地
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub

# 服务器
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

还是提示输入密码?

-v 参数调试:

ssh -v user@remote-server

常见原因:

密钥丢了怎么办

如果有备份,恢复 ~/.ssh/id_ed25519~/.ssh/id_ed25519.pub

如果没有备份,重新生成密钥,再 ssh-copy-id 到所有服务器。

安全建议

总结

SSH 免密登录核心就三步:

  1. ssh-keygen 生成密钥
  2. ssh-copy-id 复制公钥
  3. ssh 直接连接

配置 ~/.ssh/config 可以进一步简化,用别名代替完整的连接命令。