![在执行 ssh 的 bash 脚本内,仅为某些已知的 RSA 密钥自动添加主机](https://linux22.com/image/83341/%E5%9C%A8%E6%89%A7%E8%A1%8C%20ssh%20%E7%9A%84%20bash%20%E8%84%9A%E6%9C%AC%E5%86%85%EF%BC%8C%E4%BB%85%E4%B8%BA%E6%9F%90%E4%BA%9B%E5%B7%B2%E7%9F%A5%E7%9A%84%20RSA%20%E5%AF%86%E9%92%A5%E8%87%AA%E5%8A%A8%E6%B7%BB%E5%8A%A0%E4%B8%BB%E6%9C%BA.png)
我有一个 Chron 作业运行一个 bash 脚本,然后通过 SSH 连接到我的服务器。但我的服务器的IP地址会不时发生变化(我的bash脚本有一种查找新IP地址的方法)。但问题是,我的 bash 脚本收到“无法确定主机的真实性...”警告。我不想使用StrictHostKeyChecking=no
因为中间人攻击。然而:
如果RSA密钥与例如相同RSA密钥已经在known_host
文件中,或者RSA密钥我已经保存在其他MyServersPublicKey
文件中,然后我假设它是我的服务器并且它只是有一个新的IP。
警告本身显示指纹的RSA密钥来自“未知”主机,而不是RSA密钥本身。我想我可以节省RSA密钥 指纹我的主机,然后让我的 bash 脚本使用指纹从警告中并将其与已保存的进行比较指纹。但我想知道是否有人知道更简单的方法。
我是否必须为此编写自己的 bash 脚本,或者有什么可用的吗?
答案1
如注释中所述,创建证书(签名的主机密钥)将帮助您解决此问题(请参阅手册页ssh-keygen
,描述此过程的“证书”一章)。基本上,您将在服务器上创建一个 CA,签署主机密钥并将 CA 公钥存储在您的计算机中,known_hosts
例如:
@cert-authority * ssh-rsa AAAAB5W...
另一种可能性是编写一些 bash 脚本,它将在主机密钥前面添加您的 IP known_hosts
(如果您没有对该文件进行哈希处理)。类似的东西应该有效:
sed -i -e "s/your_host/new_ip,your_host/" ~/.ssh/known_hosts