![SSH:在私有网络中,如何在不使用 ssh 公钥的情况下从源计算机访问远程计算机](https://linux22.com/image/748122/SSH%EF%BC%9A%E5%9C%A8%E7%A7%81%E6%9C%89%E7%BD%91%E7%BB%9C%E4%B8%AD%EF%BC%8C%E5%A6%82%E4%BD%95%E5%9C%A8%E4%B8%8D%E4%BD%BF%E7%94%A8%20ssh%20%E5%85%AC%E9%92%A5%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E4%BB%8E%E6%BA%90%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%AE%BF%E9%97%AE%E8%BF%9C%E7%A8%8B%E8%AE%A1%E7%AE%97%E6%9C%BA.png)
我已设置 AWS codebuild,想要访问位于同一 VPC 和私有子网中的 EC2 ubuntu 实例。想要使用 SSH 从 codebuild 向实例执行命令,但在尝试在远程实例上执行命令时出现以下错误:
$ ssh -o 'PubkeyAuthentication no' [email protected] uname
Host key verification failed.
我还尝试创建 .pem 文件并将公钥粘贴到新的 pem 文件中,更改其权限并使用它。但没有成功。
$ssh -i "remote-instance.pem" [email protected] uname
Host key verification failed.
是否可以通过一些选项实现相同的效果?
答案1
正如你所知,当你第一次ssh
访问远程主机时,它会询问你是否要存储远程主机密钥~/.ssh/known_hosts
每次访问远程主机时都会验证是否ssh
收到主机密钥反对~/.ssh/known_hosts
。
然而ssh
当CodeBuild或者其他一些非交互式设置,它无法询问是否接受远程密钥(因为在非交互式会话中没有人询问),并且为了安全起见,它会失败主机密钥验证失败
您有两种解决方法:
更安全是将 Ubuntu 服务器的主机密钥提供给您的 CodeBuild 并将其存储到可以验证它的
known_hosts
文件中ssh
。确保它位于正确的路径中,并具有正确的所有权和权限。安全性较差是禁用检查:
ssh -o StrictHostKeyChecking=no {your-ubuntu-server}
希望有帮助:)
答案2
您确实需要默认尝试的 PubkeyAuthentication,因此不要指定“-o PubkeyAuthentication=no”。“-i”引用的 pem 文件应该是私钥,而不是公钥。公钥已存在于您的 ubuntu 服务器上。