如何选择远程计算机使用的私钥来创建提供给本地服务器的known_hosts条目

时间:2016-11-20 20:23:49

标签: ssh

无密码ssh有两个组件,用户身份验证和服务器身份验证。我的用户身份验证很好。我创建了一个公钥私钥对,并将我的公钥放在authorized_keys文件中。我的问题是我的本地机器从远程机器获得的公钥,用于验证我连接到的远程机器:

  

如何选择远程服务器使用的私钥进入本地服务器的known_hosts?

我不断创建和删除云提供商上的删除虚拟机以节省资金。不幸的是,取代删除的新VM生成了一个在known_hosts中使用的新的私钥 - 公钥对

我不想为每个主机手动输入ssh-keygen -R <host>。我认为最简单的是如果我已经在远程服务器上有一个硬编码的私钥。

请注意,这与以前的公私关键问题有关,例如ssh remote host identification has changed,但不会重复!我知道您可以使用ssh-keygen -R <host>手动解决问题。我正在寻找一种更自动的方法。

图:

--------------------                          -----------------------
| My machine       |                          |  Remote Machine     |
| - - - - - - - - -|                          | - - - - - - - - - - |
| Host Public Key  |<---host-authentication---| ** Host Private Key |
| (known_hosts)    |                          |                     |
| - - - - - - - - -|                          | - - - - - - - - - - |
| User Private Key |----user-authentication-->| User Public Key     |
|                  |                          | (authorized_hosts)  |
--------------------                          -----------------------

**:如何更改此部分?

2 个答案:

答案 0 :(得分:1)

META:这真的是SysOps没有编程,可能属于serverfault或超级用户,或者也许是unix.SX。

您不会说您的VM正在使用哪些SSH服务器,但我希望云提供商可能会使用 OpenSSH 来避免可能的许可问题。 如果这个猜测是正确的 sshd通常在/etc/ssh中有其配置和密钥文件,尽管可以更改。请参阅FILES下任何系统or on the web上的手册页,根据SO约定复制此处:

  

的/ etc / SSH / ssh_host_dsa_key
  的/ etc / SSH / ssh_host_ecdsa_key
  的/ etc / SSH / ssh_host_ed25519_key
  的/ etc / SSH / ssh_host_rsa_key
      这些文件包含主机密钥的私有部分。这些文件应仅由root拥有,只能由root读取,而其他人无法访问。请注意,如果这些文件可以进行组/世界访问,则sshd不会启动。

     

/etc/ssh/ssh_host_dsa_key.pub
  /etc/ssh/ssh_host_ecdsa_key.pub
  /etc/ssh/ssh_host_ed25519_key.pub
  /etc/ssh/ssh_host_rsa_key.pub
      这些文件包含主机密钥的公共部分。这些文件应该是世界可读的,但只能由root写入。他们的内容应与各自的私人部分相匹配。这些文件并没有真正用于任何事情;它们是为了方便用户而提供的,因此可以将其内容复制到已知的主机文件中。这些文件是使用ssh-keygen(1)创建的。

主机最多可以有四个协议v2的密钥对:RSA,DSA,ECDSA和ED25519。非常旧版本仅支持RSA和DSA。旧版本不支持ED25519。默认情况下,Newish版本不会使用 DSA,但会支持它。该代码仍然支持带有ssh_host_key[.pub]的协议v1(名称中没有算法),但v1已过时且已损坏,您不应该使用它。

该手册页并没有说明我可以看到,但在实践中已经有好几年了,现在OpenSSH服务器通常会自动生成主机密钥,如果它们在代码或包安装/启动脚本中丢失,那么只需删除您不想要的关键类型可能无法正常工作。您的客户端可能能够控制主机使用哪种受支持的pubkey算法;对于相当新版本的OpenSSH,请参阅HostKeyAlgorithms下的手册页for ssh_config。否则,要么上传所有支持的密钥类型,要么上传所需的密钥类型并调整sshd_config文件以不使用其他文件或为其他文件创建无效但不可写和不可删除的文件,以便sshd 不能使用它们。

ASIDE:我会反转你的图表。主机auth总是首先出现,实际上总是出现pubkey(标准有其他选项,但它们没有被使用);客户端身份验证通常发生在第二位,但可以被跳过,而可以是pubkey或密码。

答案 1 :(得分:0)

我最终破解了我的脚本(这是不安全的):

np.nan

-o StrictHostKeyChecking = no:将接受连接到新主机

-o UserKnownHostsFile = / dev / null:将新主机保存到/ dev / null所以每次ssh时,它都是新主机

最初在https://askubuntu.com/questions/87449/how-to-disable-strict-host-key-checking-in-ssh中建议解决类似的问题。