我有点糊涂了。我试图使用github动作SSH到我的ec2实例,并做一个部署。我有密钥(从ec2控制台)保存为github中的秘密,如下所示:
- name: Install SSH key
uses: shimataro/ssh-key-action@v2
with:
key: ${{ secrets.COBOTSSH }}
name: id_rsa
known_hosts: ${{ secrets.KNOWN_HOSTS }}
- name: ssh
run: ssh ${{ secrets.USERNAME }}@${{ secrets.KNOWN_HOSTS }}
不幸的是,我得到:Host key verification failed.
我已经尝试了多个SSH github操作解决方案,所以我认为这是用户错误(shimataro是黄金标准)。所以我要非常具体地说明我做了什么:
- to keypairs
- 创建一个新的密钥对并下载pem文件
- 将pem文件的整个文本复制到COBOTSSH秘密文件
- 将EC2实例的DNS名称复制到KNOWN_HOSTS中(与变量名称相反,它只是一个DNS条目)
- 在我的putty终端上使用SSH登录到机箱,创建一个名为X的用户,然后将X输入USERNAME密钥。我想这是错误的,因为它默认需要密码?但是这个错误没有任何赘述。如何从EC2控制台使用密钥并仍然运行
ssh-copy-id
之类的命令?一个任何一行一行的例子如何做到这一点将是超级赞赏-我是一个linux新手。
根据shimataro/ssh-key-action上的Q&A
主机密钥验证失败。正确设置known_hosts参数(使用ssh-keyscan命令)
KNOWN_HOSTS
秘密应该反映known_hosts
文件的样子。known_hosts
文件包含您以前连接的远程服务器的SSH指纹。在Windows上,远程服务器的known_hosts
文件中的条目可能看起来像这样(在Ubuntu Linux上,IP看起来像胡言乱语,也许它也被加密了):
3.25.10.23 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNosdfwecYTItbmlzdHAyNAAAIbmlzdHAyNTYAAABBBAets0ZEyan6q5K1Z7fiMcqpLLjtSGaqn5kwec2vXCdLumKdtWmJexjc1Q8U43COnEiOyEI9HSHBYqm5E1Rog=
错误是因为您将EC2 DNS复制到KNOWN_HOSTS
秘密中,这不是正确的格式。EC2 DNS看起来像这样:ec2-3-5-30-213.ap-southeast-2.compute.amazonaws.com
要获得正确的指纹,您可以在记事本中打开known_hosts
文件。在Windows上是C:Users{YourUserName}.ssh
,在Linux (Ubuntu)上是home{YourUserName}.ssh
。
您可能能够通过IP地址识别远程服务器条目。它不在我的电脑上,所以我打开一个终端(在windows或linux上)并执行ssh {YourRemoteServerUser}@{YourRemoteServerIP}
。它在提示符中显示一个指纹(忽略它),并询问我是否要连接到主机。单击"Yes",它会将SSH指纹存储在操作系统的known_hosts
文件中。然后我简单地打开文件并将条目复制到KNOWN_HOSTS
secret中。
注意:shimataro概述使用'StrictHostKeyChecking=no'在大多数情况下是不安全的。看到这里。