虚拟机环境下配置最简单的SSH免密登录(VMware + Ubuntu 24.04 / Rocky 10)

一、前言与实验环境

SSH 免密登录是管理 Linux 服务器的必备技能。本文采用 VMware 虚拟机,以 Rocky 10(客户端)Ubuntu 24.04(服务端) 为例,一步步带你完成配置。文章末尾附有高频错误排查清单,即使出现意外也能快速解决。

角色操作系统主机名IP 地址
客户端Rocky 10rocky1010.0.0.12
服务端Ubuntu 24.04ubuntu2410.0.0.13

说明:你的 IP 可能不同,请用 ip a 查看实际地址,并确保两台虚拟机能够互相 ping 通。

二、第一步:关闭干扰服务(两台都要做)

为避免防火墙和安全模块干扰 SSH 连接,实验阶段先临时关闭它们。

Rocky 10 上执行:

sudo systemctl stop firewalld          # 关闭防火墙
sudo setenforce 0                      # 临时关闭 SELinux

Ubuntu 24.04 上执行:

sudo ufw disable                       # 关闭 UFW 防火墙
sudo systemctl stop apparmor           # 关闭 AppArmor
sudo systemctl disable apparmor        # 防止重启后自动开启

📌 易错点

  • 命令 setenforce 0 只是临时关闭 SELinux,重启后会恢复。实验够用,生产环境请配置策略。
  • AppArmor 拼写容易错,注意是 apparmor,不是 appror

三、第二步:检查 .ssh 目录

分别在两台机器上执行:

ls -la ~/.ssh
  • Rocky 10 默认可能没有 .ssh 目录,或目录为空。
  • Ubuntu 24.04 一般存在 .ssh 目录,且会有一个内容为空的 authorized_keys 文件。

如果目录不存在,无需手动创建,后续 ssh-keygenssh-copy-id 会自动处理。

📌 易错点

  • 命令是 ls -la(显示隐藏文件及详细信息),不是 ls -a 后再 ls .ssh/。一步到位更清晰。
  • authorized_keys 文件即使存在,权限必须为 600,目录权限必须为 700,否则 SSH 拒绝认证。我们后面会提到。

四、第三步:在客户端(Rocky 10)生成密钥对

在 Rocky 10 终端执行:

ssh-keygen -t ed25519

在这里插入图片描述

  • -t ed25519 指定使用 Ed25519 算法(比 RSA 更快更安全,默认就生成此类型)。
  • 出现三次询问:
    1. Enter file in which to save the key → 直接回车,使用默认路径 ~/.ssh/id_ed25519
    2. Enter passphrase → 直接回车,不设密码(实验方便,生产建议设置)
    3. Enter same passphrase again → 再次回车确认

完成后会在 ~/.ssh/ 下生成:

  • id_ed25519 :私钥(自己保管,不可外传)
  • id_ed25519.pub :公钥(需要放到服务端)

📌 易错点

  • 如果你希望生成 RSA 密钥,可以用 -t rsa -b 4096,但 Ed25519 是当前推荐算法。
  • 私钥权限必须是 600,否则 SSH 客户端会拒绝使用。如果后续连不上,可以执行 chmod 600 ~/.ssh/id_ed25519 修复。

五、第四步:将公钥复制到 Ubuntu 服务端

在 Rocky 10 上执行:

ssh-copy-id root@10.0.0.13

在这里插入图片描述

系统交互:

  1. 提示 Are you sure you want to continue connecting (yes/no)? → 输入 yes(首次连接需确认主机指纹)。
  2. 输入 Ubuntu 服务器 root 用户的密码。

成功后,公钥会自动追加到 Ubuntu 的 ~/.ssh/authorized_keys 文件末尾。

验证公钥已送达:在 Ubuntu 上执行:

cat ~/.ssh/authorized_keys

在这里插入图片描述

你会看到一行以 ssh-ed25519 开头的字符串,那就是 Rocky 的公钥。

📌 易错点(非常关键)

  1. Ubuntu 默认禁止 root 通过 SSH 密码登录
    如果你在第四步输入 root 密码后提示 Permission denied,说明 root 登录未开放。解决办法(二选一):
    • 方法 A(推荐新手):改用普通用户传输密钥。
      先在 Ubuntu 上创建一个普通用户(如 user),然后在 Rocky 上执行 ssh-copy-id user@10.0.0.13,最后用 ssh user@10.0.0.13 验证。
    • 方法 B:临时开启 root 密码登录。
      编辑 Ubuntu 的 /etc/ssh/sshd_config,找到 PermitRootLogin 改为 yes(若为 prohibit-password 需改成 yes),然后 sudo systemctl restart sshd。实验后建议改回。
  2. ssh-copy-id 后仍然需要密码
    检查服务端 .ssh 目录权限(700)和 authorized_keys 文件权限(600)。修复命令:
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys
    
  3. 主机名解析问题:尽量使用 IP 地址避免 DNS 解析错误。如果提示 Could not resolve hostname,请检查 IP 是否写错。

六、第五步:验证免密登录

回到 Rocky 10 终端,输入:

ssh root@10.0.0.13

(如果使用了普通用户,则改为 ssh user@10.0.0.13
在这里插入图片描述

若直接进入 Ubuntu 的 Shell 且未提示输入密码,恭喜,免密登录配置成功!
退出登录输入 exit 即可。

七、高频错误排查清单

现象可能原因解决办法
ssh: connect to host port 22: Connection refused服务端 SSH 服务未启动Ubuntu: sudo systemctl start ssh ; Rocky: sudo systemctl start sshd
仍然提示输入密码公钥未正确复制或权限错误重新执行 ssh-copy-id,并检查权限
Permission denied (publickey)私钥未加载或权限过宽客户端执行 chmod 600 ~/.ssh/id_ed25519
Host key verification failed服务端重装系统后指纹变化客户端执行 ssh-keygen -R 10.0.0.13 清除旧指纹
连接超时或 ping 不通虚拟机网络设置错误确认两台虚机网络适配器同为 NAT 或同为桥接模式,并处于同一网段
Rocky 端提示 firewall-cmd: command not found未安装 firewalld已执行 systemctl stop firewalld 即可,无需安装

八、拓展练习:双向免密登录

此时只是 Rocky 可以免密连接 Ubuntu。若想让 Ubuntu 也能免密连接 Rocky,只需将角色互换:

  1. 在 Ubuntu 上生成密钥对:ssh-keygen -t ed25519
  2. 将公钥发给 Rocky:ssh-copy-id rocky用户名@10.0.0.12
  3. 验证:ssh rocky用户名@10.0.0.12

九、总结

就此我们学会了

  • 临时关闭防火墙、SELinux/AppArmor 以排除干扰;
  • 使用 ssh-keygen 生成 Ed25519 密钥对;
  • 通过 ssh-copy-id 安全地部署公钥;
  • 独立解决因权限、root 登录限制、网络等因素导致的登录失败问题。

动手实验一次,以后配置集群、使用自动化工具就能轻车熟路。如果有帮助,欢迎点赞收藏,遇到问题可以在评论区交流。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值