You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Actions部署EC2实例时ssh-keyscan失败问题求助

GitHub Actions部署EC2时ssh-keyscan失败问题

尝试借助GitHub Actions实现代码向EC2实例的自动化部署,但ssh-keyscan操作在Actions工作流中失败,该操作在本地机器上可正常执行。

工作流文件

name: Deploy

on:
  push:
    branches:
      - 'main'

env:
  SERVER_HOST: x.x.x.xx
  SERVER_USER: username
  SERVER_PATH: ~/folder-name/

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3

      - name: Install SSH Key
        uses: shimataro/ssh-key-action@v2.3.1
        with:
          key: "${{ secrets.SSH_PRIVATE_KEY }}"
          known_hosts: "just-a-placeholder-so-we-dont-get-errors"

      - name: Generate auth hosts
        run: ssh-keyscan -H ${{ env.SERVER_HOST }} >> ~/.ssh/known_hosts

      # Deploy
      - run: rsync -rv --delete . ${{ env.SERVER_USER }}@${{ env.SERVER_HOST }}:${{ env.SERVER_PATH }}

备注

  • secrets.SSH_PRIVATE_KEY为通过ssh-keygen -t rsa -b 4096 -C "dummyemail@host.com"生成的OpenSSH私钥,关联触发工作流的GitHub账户邮箱;
  • 已将对应的公钥添加至服务器的~/.ssh/authorized_keys文件中。

实际错误

ssh-keyscan: connect to host x.x.x.xx port 22: Connection timed out

解决方案

1. 检查EC2安全组配置

确保EC2实例的安全组入站规则允许22端口访问,来源可添加GitHub Actions官方IP段(可在GitHub Docs查询最新列表),测试阶段可临时允许0.0.0.0/0(生产环境不建议)。

2. 正确配置known_hosts,替换占位符

不要用占位符,直接通过预先生成的服务器公钥配置:

  • 本地执行ssh-keyscan -H x.x.x.xx,将输出内容存入GitHub仓库的Secrets(命名为KNOWN_HOSTS);
  • 修改工作流中的SSH Key安装步骤:
- name: Install SSH Key
  uses: shimataro/ssh-key-action@v2.3.1
  with:
    key: "${{ secrets.SSH_PRIVATE_KEY }}"
    known_hosts: "${{ secrets.KNOWN_HOSTS }}"

此方法可跳过Actions中的ssh-keyscan步骤,规避网络问题。

3. 验证EC2实例网络可达性

  • 确认EC2实例拥有公网IP且能通过公网访问;
  • 若使用私有IP,需将GitHub Actions的Runner部署在VPC内部(使用Self-hosted Runner)。

4. 检查EC2本地防火墙

登录EC2实例,确认系统防火墙(如ufw、firewalld)已允许22端口的入站流量。

内容的提问来源于stack exchange,提问作者sergeyka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 03:31:37