Duke Yin's Technology database

用已知的Private Key登录服务器

如果你已经连接了一台Linux Ubuntu/Debian服务器A,又已知另一台Linux服务器B的私钥(Private Key),可以直接使用这个PrivateKey登录服务器B。

为了方便,假设服务器B的IP地址是192.168.2.1

1. 在 A 上保存 B 的私钥

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

nano ~/.ssh/openwrt_b.key

把私钥完整内容粘贴进去,必须包含类似:

-----BEGIN OPENSSH PRIVATE KEY-----
...
-----END OPENSSH PRIVATE KEY-----

保存后设置权限:

chmod 600 ~/.ssh/openwrt_b.key

如果私钥文件已经在 A 的某个位置,也可以直接复制:

cp /path/to/private_key ~/.ssh/openwrt_b.key
chmod 600 ~/.ssh/openwrt_b.key

2. 测试是否能登录 B

ssh -i ~/.ssh/openwrt_b.key root@192.168.2.1

如果能直接登录,说明私钥有效,且 B 上已经有对应公钥。

3. 配置 A 的 SSH,使 ssh 192.168.2.1 自动使用私钥

编辑:

nano ~/.ssh/config
chmod 600 ~/.ssh/config

写入:

Host 192.168.2.1
    HostName 192.168.2.1
    User root
    IdentityFile ~/.ssh/openwrt_b.key
    IdentitiesOnly yes

如果 B 的 SSH 端口不是 22,再加一行:

    Port 你的端口

以后在 A 上直接执行:

ssh 192.168.2.1

就会自动以 root 用户和 ~/.ssh/openwrt_b.key 私钥登录 B,不再需要输入密码。

4. 如果私钥本身有密码

如果这个私钥设置了 passphrase,那么 SSH 还会提示输入私钥密码。要完全免输,可以:

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/openwrt_b.key

或者去掉私钥密码:

ssh-keygen -p -f ~/.ssh/openwrt_b.key

但去掉密码会降低安全性,任何人拿到这个私钥文件都能登录 B。

5. 注意事项

  • 私钥必须放在持久化目录,例如 /root/.ssh/ 或 /home/用户名/.ssh/,不要放 /tmp。
  • .ssh 权限建议 700,私钥权限必须是 600。
  • 如果 A 上用普通用户执行 ssh,配置要放在该普通用户的 ~/.ssh/config,不是 /root/.ssh/config。
  • 登录 B 的用户不一定是 root,按实际改 User。
  • 如果你手里的“B 服务器私钥”其实是 OpenWRT 的 host key 主机私钥,那不是用户登录私钥,不能直接拿来登录。用户登录需要的是:私钥在 A,公钥在 B 的 /etc/dropbear/authorized_keys 或 /root/.ssh/authorized_keys。

一句话:私钥放 A 的 ~/.ssh/openwrt_b.key,权限 600,然后在 ~/.ssh/config 里给 192.168.2.1 指定 IdentityFile 和 User,以后 ssh 192.168.2.1 就能免密登录。

# # #

发布评论

评论

标注 * 的为必填项。