Linux设置SSH免密码密钥登录

[复制链接]
发表于 2026-10-4 16:22:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

每次登录都输密码很烦,但把服务器密码改弱又更危险。SSH 密钥登录是正解:本地留私钥、服务器放公钥,之后登录不用密码。这篇走完整流程,并把最容易卡住的权限和 SELinux 两处讲透。

一、第一步:在客户端生成密钥对

1.1 ssh-keygen 的常用选项

-t   指定类型(rsa / ed25519 / ecdsa)
-b   指定长度(RSA、ECDSA 有效)
-C   加注释,标识用途
-f   指定保存路径
-N   直接设密钥密码,避免交互
-p   改已有密钥的密码
-q   静默模式

常用组合:

命令用途
ssh-keygen -t rsa -b 4096生成 RSA 4096 密钥
ssh-keygen -t ed25519生成 ed25519 密钥(推荐)
ssh-keygen -p -f ~/.ssh/id_rsa改密钥密码
ssh-keygen -l -f ~/.ssh/id_rsa.pub查看密钥指纹
ssh-copy-id user@host复制公钥到远程服务器

1.2 算法怎么选

  • ed25519:最现代、密钥短、性能好,需要较新的 SSH 客户端/服务端。先查服务端支不支持:ssh -Q key,列表里有 ssh-ed25519 就能用。
  • RSA 4096:兼容性最好,代价是密钥长,依然安全。
  • 别用的:RSA 2048(强度不足)、DSA(已不安全)、ECDSA(除非明确知道为什么)。
ssh-keygen -t ed25519 -C "[email protected]"

一路回车用默认设置,也可以设一个 passphrase 给密钥再上一把锁。

Windows 10/11 自带 OpenSSH 客户端,直接用上面的命令即可;用 Xshell 的话走「工具 → 新建用户密钥生成向导」,选 RSA 4096 或 ED25519,生成后公钥用来上传、私钥本地保存,可设名称与 passphrase,也能导出成 PuTTY 能读的 .ppk。

二、第二步:把公钥传到服务器

2.1 ssh-copy-id(Linux 下推荐)

ssh-copy-id username@server_ip

提示输密码后,公钥自动追加到服务器的 ~/.ssh/authorized_keys。

2.2 手动复制(ssh-copy-id 不可用时)

cat ~/.ssh/id_rsa.pub          # 客户端看公钥
ssh username@server_ip         # 登录服务器

mkdir -p ~/.ssh
chmod 700 ~/.ssh

echo "你的公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

也可以直接用 FTP 工具把公钥文件传上去再改名成 authorized_keys。注意:如果用 root 身份上传,文件的属主属组会变成 root,必须 chown 成目标用户,否则用不了。

三、第三步:改服务端配置

# CentOS / RHEL
sudo vi /etc/ssh/sshd_config

# Debian / Ubuntu
sudo nano /etc/ssh/sshd_config

确保这几行:

PubkeyAuthentication yes              # 开启密钥登录
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no             # 确认密钥登录可用后再关密码
ChallengeResponseAuthentication no
UsePAM no

重启服务:

# CentOS 7 / RHEL 7
sudo systemctl restart sshd

# CentOS 6 / RHEL 6
sudo service sshd restart

# Debian / Ubuntu
sudo systemctl restart ssh

测一下:

ssh username@server_ip

不再要密码就说明成了。别急着关旧会话,先开着验证。

四、权限:最容易翻车的地方

  • ~/.ssh 目录权限必须是 700。
  • authorized_keys 权限必须是 600。
  • 私钥 ~/.ssh/id_rsa 也设 600,别外泄。
  • 用 root 传文件到别的用户家目录,务必 chown 用户:用户组 改回去。
  • 多个用户各自在自己的家目录下重复这套流程,互不影响。

五、排障的四个方向

  1. 看日志日志:CentOS 看 /var/log/secure,Debian 看 /var/log/auth.log。
  2. 先开密码登录排查:确认能密码登录后,再逐步切到密钥。
  3. SELinux 拦了(CentOS 常见):临时 sudo setenforce 0 验证是不是它;永久方案两条路——
    1. 生成策略:sudo ausearch -c 'sshd' --raw | audit2allow -M my-sshd 然后 sudo semodule -i my-sshd.pp;
    2. 恢复上下文:sudo restorecon -Rv ~/.ssh 和 sudo restorecon -Rv /home。
  4. 权限不对:回到第四节那三条,优先chmod 700/600。

六、安全提醒

  • 禁用密码登录前先确认密钥能用,否则把自己锁在门外。
  • 私钥丢了就进不去了,务必备份;设了 passphrase 又忘了密码,只能重新生成。
  • 不同服务用不同密钥对,泄露一个不影响全局。
  • 想免输密码又要带钥匙串,用 ssh-agent 统一管理。

结论

密钥登录三步:客户端 ssh-keygen -t ed25519 生成 → 公钥用 ssh-copy-id 或手动写进 ~/.ssh/authorized_keys → 服务端 PubkeyAuthentication yes 并重启 sshd。成败九成在权限(700/600)和 SELinux 上下文(restorecon)上;确认登录成功之后,再把 PasswordAuthentication 关掉。

qidao123.com企服评测-应用市场 编辑提示

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表