SSH:在私有网络中,如何在不使用 ssh 公钥的情况下从源计算机访问远程计算机

SSH:在私有网络中,如何在不使用 ssh 公钥的情况下从源计算机访问远程计算机

我已设置 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

然而sshCodeBuild或者其他一些非交互式设置,它无法询问是否接受远程密钥(因为在非交互式会话中没有人询问),并且为了安全起见,它会失败主机密钥验证失败

您有两种解决方法:

  1. 更安全是将 Ubuntu 服务器的主机密钥提供给您的 CodeBuild 并将其存储到可以验证它的known_hosts文件中ssh。确保它位于正确的路径中,并具有正确的所有权和权限。

  2. 安全性较差是禁用检查:

    ssh -o StrictHostKeyChecking=no {your-ubuntu-server}
    

希望有帮助:)

答案2

您确实需要默认尝试的 PubkeyAuthentication,因此不要指定“-o PubkeyAuthentication=no”。“-i”引用的 pem 文件应该是私钥,而不是公钥。公钥已存在于您的 ubuntu 服务器上。

相关内容