通过 SSH 登录我的 ec2 实例并部署代码的 Github 操作

tyr*_*awn 5 ssh amazon-ec2 amazon-web-services github-actions

我有点困惑。我正在尝试使用 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 }}
Run Code Online (Sandbox Code Playgroud)

不幸的是我得到: Host key verification failed.

我已经尝试了多种 SSH github 操作解决方案,所以我认为这是用户错误(shimataro 是黄金标准)。所以我会非常具体地说明我做了什么:

  1. 转到密钥对
  2. 创建新的密钥对并下载 pem 文件
  3. 将 pem 文件的整个文本复制到秘密 COBOTSSH 中
  4. 将 EC2 实例的 DNS 名称复制到 KNOWN_HOSTS 中(与变量名称相反,它只是一个 DNS 条目)
  5. 在我的 putty 终端上使用 SSH 登录到盒子,并创建一个名为 X 的用户,然后将 X 放入 USERNAME 密钥中。我认为这是错误的,因为它默认需要密码?但该错误没有任何冗长。如何使用 EC2 控制台中的密钥并仍然运行以下命令 ssh-copy-id?任何关于如何执行此操作的逐行示例将非常感激 - 我是一个 Linux 菜鸟。

Chr*_*ard 3

根据shimataro/ssh-key-action 上的问答

主机密钥验证失败。:正确设置known_hosts参数(使用ssh-keyscan命令)。

KNOWN_HOSTS秘密应该反映known_hosts文件的样子。known_hosts文件包含您之前连接过的远程服务器的 SSH 指纹。远程服务器文件中的条目known_hosts在 Windows 上可能看起来像这样(在 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}. 它在提示中显示指纹(忽略它)并询问我是否要连接到主机。单击“是”,它将把 SSH 指纹存储在known_hosts您操作系统的文件中。然后我只需打开该文件并将条目复制到KNOWN_HOSTS秘密中。

注意:shimataro 概述了在大多数情况下使用“StrictHostKeyChecking=no”并不安全。看这里