免密 SSH 登录:生成并配置 authorized_keys(举例 OpenCloudOS 云服务器)

原理:本地电脑生成密钥对 → 把公钥内容粘贴到服务器 /root/.ssh/authorized_keys

私钥留在你本地电脑,不要上传服务器。

一、本地电脑生成密钥对(Windows/Mac/Linux 都可以)

打开本地终端(Windows 用 PowerShell / Git Bash)

ssh-keygen -t rsa -b 4096

一路回车:

1. 提示保存路径:直接回车默认

2. 输入密钥密码(可选,推荐设置,防止私钥泄露,不填就是无密码免密)

生成后本地会得到 2 个文件:

- id_rsa 私钥(本地保留,绝对不要发给服务器)

- id_rsa.pub 公钥,需要放到云服务器 authorized_keys

查看公钥内容(复制全部输出)

cat id_rsa.pub

二、登录你的云服务器(root 账号),准备目录与文件

你服务器是 root,对应目录 /root/.ssh/

1. 创建 .ssh 目录(不存在才创建)

mkdir -p /root/.ssh

2. 创建 authorized_keys 文件,粘贴公钥

vim /root/.ssh/authorized_keys

按 i 进入编辑模式,把刚才本地 id_rsa.pub 的全部一行内容粘贴进去

粘贴完成:Esc → 输入 :wq 保存退出

3. 关键!设置权限(权限不对免密直接失效!ssh 很严格)


# .ssh目录权限 700
chmod 700 /root/.ssh
# authorized_keys 文件权限 600
chmod 600 /root/.ssh/authorized_keys
# 属主必须是root
chown -R root:root /root/.ssh

重点:authorized_keys 权限不能大于 644,否则 ssh 拒绝使用公钥登录。

三、确认服务器 ssh 配置开启公钥认证

编辑 sshd 配置

vim /etc/ssh/sshd_config

确保下面这几项是开启(去掉前面#注释)


PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

如果你想只允许密钥登录,禁用密码登录,再加:

PasswordAuthentication no

校验配置有没有语法错误,无报错再重启 sshd


sshd -t
systemctl restart sshd

四、本地测试免密登录

本地终端执行(替换为你服务器 IP)

ssh root@你的服务器公网IP

成功:不需要输入服务器密码(如果密钥设置了密码,只需要输入私钥密码)

---

快捷方式(可选,一行命令直接把本地公钥上传到服务器)

在本地电脑终端执行,自动完成上面创建文件 + 粘贴公钥

ssh-copy-id root@服务器IP

如果 Windows 没有 ssh-copy-id 命令,就手动复制粘贴公钥方案。

常见失败排查

1. 公钥粘贴多换行、空格:必须完整一行

2. /root/.ssh 或者 authorized_keys 权限太大(最常见)

3. sshd_config 没开启 PubkeyAuthentication

4. 防火墙 / 安全组阻断 ssh 端口

5. 公钥内容复制不全

五、xshell免密登录

xshell-新建-连接-名称自定义、主机输入云服务IP-用户身份验证-用户名输入真实的、密码空着、取消Password勾选-勾选Public Key并选中(点击它)-右侧设置-弹框勾选密钥文件-右侧三个点浏览-弹框点击导入-C:\Users\用户名\.ssh\id_rsa-连续点击确定-连接即可。