如何将 ssh 密钥迁移到新的 CentOS 服务器?

如何将 ssh 密钥迁移到新的 CentOS 服务器?

我们有许多脚本通过已保存的(无密码)密钥对在 ssh 上运行。客户端和服务器都是 CentOS 6.x。我知道,如果您有一台新的客户端计算机(脚本从其运行),您只需将 ~/.ssh/known_hosts 从旧计算机复制到新计算机即可。

但是,如果我要更换该工作站所连接的服务器,我应该复制什么来保留密钥对?我尝试复制 /etc/ssh 的内容。这样做之后,我不再收到“密钥已更改”的拒绝连接客户端提示,但我仍然必须输入密码。

我已经在 Google 上搜索过,但找不到太多信息。我做错了什么?

答案1

当您创建私钥时,它也会创建一个匹配的公钥。

私钥/公钥对背后的想法是保证您的私钥安全(不要通过网络、互联网发送它,甚至不要允许其他用户阅读它)。

公钥就是您存储在要连接的服务器上的内容。

因此,当您通过 ssh 连接到服务器时,您需要提供您的私钥和服务器上的用户身份登录,如下所示:ssh -i ~/.ssh/path/to/your/private/key user@server

您可以在服务器上存储您的公钥,如下所示:/home/user/.ssh/authorized_keys

您可以将服务器的authorized_keys文件的内容复制到另一台服务器,它只是一个包含文本的文件(每行对应一个公钥)。

答案2

SSH 密钥存储在~/.ssh/authorized_keys

您应该能够将此文件从旧服务器传输到新服务器以解决您的问题。

答案3

ssh-copy-id -i .ssh/key.pub user@server 应该可以解决问题。

答案4

确保您尝试进行身份验证的用户的 key.pub 存在于 .ssh/authorized_keys 中。

您可以通过运行以下命令来执行此操作:

key=$(cat ~/.ssh/key.pub)
ssh user@host "cat ~/.ssh/authorized_keys" |grep $key

如果您看到任何 Grep Usage 错误,请确保您的 key.pub 路径正确且存在。如果不存在,您可以创建一个:

ssh-keygen -b 4096 -t rsa -f ~/.ssh/key

如果您看到授权密钥文件没有这样的文件或目录,则表示它不存在,您需要创建它。

如果不存在,您可以通过运行以下命令将其复制到那里:

cat ~/.ssh/key.pub | ssh user@host "cat >> ~/.ssh/authorized_keys"

一旦完成这项工作,最好在 /etc/ssh/sshd_conf 中禁用密码验证

示例参数更改 /etc/ssh/sshd_config:

RSAAuthentication yes
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no

有关在 CentOS 上保护 SSH 的更多信息,请参阅保护 OpenSSH在 CentOS wiki 上。

相关内容