怎么在 Linux 上配置 SSH 免密码登录具体步骤

文章导读
在 Linux 上配置 SSH 免密码登录,最推荐的方式是生成 SSH 密钥对并将公钥部署到目标服务器的 authorized_keys 文件中,适合需要频繁远程登录、自动化脚本执行或集群管理的场景。
📋 目录
  1. A 命令速用版
  2. B 为什么会这样
  3. C 分步处理
  4. D 怎么验证是否生效
  5. E 常见坑
  6. F 参考来源
A A

在 Linux 上配置 SSH 免密码登录,最推荐的方式是生成 SSH 密钥对并将公钥部署到目标服务器的 authorized_keys 文件中,适合需要频繁远程登录、自动化脚本执行或集群管理的场景。

先说结论:SSH 免密码登录通过公钥认证机制实现,配置过程简单但需要注意权限设置和密钥保管,配置完成后能显著提升运维效率。

  • 适合:需要频繁登录多台服务器、自动化部署脚本、集群节点间通信的场景
  • 先准备:确认 SSH 服务已安装运行、目标服务器可网络连接、有目标服务器的登录凭证
  • 验收:使用 ssh 命令直接登录目标服务器,无需输入密码即表示配置成功

命令速用版

如果只是想快速完成配置,以下是核心命令序列:

# 1. 生成 SSH 密钥对(本地机器执行)
ssh-keygen -t rsa -b 2048

# 2. 将公钥复制到远程服务器
ssh-copy-id username@remote_host

# 3. 测试免密登录
ssh username@remote_host

如果 ssh-copy-id 命令不可用,可以手动复制公钥:

cat ~/.ssh/id_rsa.pub | ssh username@remote_host 'mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys'

为什么会这样

SSH 免密码登录的原理是基于非对称加密的公钥认证机制。你在本地生成一对密钥:私钥(id_rsa)保存在本地,公钥(id_rsa.pub)放到远程服务器的~/.ssh/authorized_keys 文件中。

当你发起 SSH 连接时,服务器会用公钥加密一段挑战信息,只有持有对应私钥的客户端才能解密并返回正确响应。这个过程不需要输入密码,但安全性依赖于私钥的保管。

需要注意的是,免密码登录不等于无安全保护。私钥本身可以设置密码短语(passphrase)来增加一层保护,但如果私钥文件泄露,持有者就能访问你的服务器。

分步处理

第一步:检查现有密钥

在生成新密钥前,先确认本地是否已有密钥对,避免覆盖现有密钥:

ls -la ~/.ssh/

如果看到 id_rsa 和 id_rsa.pub 文件,说明已有密钥对,可以跳过生成步骤。

第二步:生成 SSH 密钥对

在本地机器(发起连接的机器)上执行:

ssh-keygen -t rsa -b 2048

命令会提示你:

  • 密钥保存路径:直接回车使用默认路径(~/.ssh/id_rsa)
  • 密码短语(passphrase):如果追求方便可以留空,但建议设置以增加安全性

生成完成后,~/.ssh/目录下会有两个文件:id_rsa(私钥,必须保密)和 id_rsa.pub(公钥,可以分发)。

第三步:将公钥部署到远程服务器

方法一(推荐):使用 ssh-copy-id 命令

怎么在 Linux 上配置 SSH 免密码登录具体步骤
ssh-copy-id username@remote_host

首次执行时需要输入一次远程服务器的密码,之后公钥会自动添加到远程的~/.ssh/authorized_keys 文件中。

方法二:手动复制

# 查看公钥内容
cat ~/.ssh/id_rsa.pub

# 登录远程服务器后,将公钥内容追加到 authorized_keys
echo "公钥内容" >> ~/.ssh/authorized_keys

第四步:检查远程服务器权限

远程服务器上的相关文件权限必须正确,否则 SSH 会拒绝公钥认证:

# 在远程服务器上执行
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 400 ~/.ssh/authorized_keys  # 也可设置为只读

权限过于宽松(如 777)会导致 SSH 出于安全考虑拒绝使用公钥认证。

第五步:配置 SSH 服务端(可选)

如果需要禁用密码登录只允许密钥登录,在远程服务器上编辑/etc/ssh/sshd_config:

PubkeyAuthentication yes
PasswordAuthentication no

修改后重启 SSH 服务:

sudo service ssh restart
# 或
sudo systemctl restart sshd

注意:在确认密钥登录正常工作前,不要禁用密码认证,否则可能把自己锁在服务器外面。

怎么验证是否生效

配置完成后,在本地机器执行:

ssh -v username@remote_host

使用-v 参数可以查看详细日志。如果配置成功,你会看到类似输出:

Offering public key: /home/user/.ssh/id_rsa
Authentication succeeded (publickey).

如果仍然提示输入密码,检查以下几点:

  • 远程服务器~/.ssh/authorized_keys 文件是否包含你的公钥
  • 远程服务器~/.ssh 目录和 authorized_keys 文件权限是否正确
  • 远程服务器/etc/ssh/sshd_config 中 PubkeyAuthentication 是否启用
  • 本地私钥文件权限是否过于开放(应为 600)

常见坑

1. 权限问题导致公钥认证失败

怎么在 Linux 上配置 SSH 免密码登录具体步骤

这是最常见的问题。远程服务器上~/.ssh 目录权限应为 700,authorized_keys 文件权限应为 600 或 400。权限过宽会被 SSH 拒绝。

2. 不同用户密钥不通用

每个用户的密钥存放在各自家目录的.ssh 文件夹中。root 用户的密钥在/root/.ssh,普通用户在/home/username/.ssh。用哪个用户登录就要用对应用户的密钥。

3. 多密钥环境需要指定密钥文件

如果本地有多个密钥对,可以在~/.ssh/config 中配置:

Host myserver
    HostName 192.168.1.100
    User username
    IdentityFile ~/.ssh/id_rsa

之后使用 ssh myserver 即可自动使用指定密钥。

4. 首次连接需要确认主机指纹

第一次连接新服务器时会提示确认主机指纹,输入 yes 后服务器会加入 known_hosts 文件。如果服务器重装或密钥变更,需要清理 known_hosts 中对应条目。

5. 私钥保管不当的安全风险

免密码登录的便利性建立在私钥安全的基础上。如果私钥泄露,攻击者可以直接访问你的服务器。建议:

  • 私钥文件权限设置为 600
  • 生成密钥时设置密码短语
  • 不要将私钥上传到公共仓库或共享
  • 定期轮换密钥

6. 禁用密码登录前务必测试

在修改 sshd_config 禁用密码认证前,一定要先用新开的终端窗口测试密钥登录是否成功。如果配置有误,保留密码认证可以作为回退手段。

参考来源

  • Linux 如何设置无密码 SSH 登录 - 技术教程知识库
  • Linux 服务器配置 ssh 免密码登陆教程 - 技术教程知识库
  • 如何在 Linux 中设置 SSH 无密码登录 - 技术教程知识库
  • Linux 系统之间实现免密码登录 (SSH 无密码登录) - 技术教程知识库
  • ssh 配置:在 Linux 中 ssh 配置无密码登陆完整步骤以及易错点分析 - 技术教程知识库
  • Linux 如何设置 ssh 密钥 (免密码) 登录 - 技术教程知识库