我们有许多脚本通过已保存的(无密码)密钥对在 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 上。