我已设置 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 服务器上。