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

Git Action SSH连接EC2实例时出现连接拒绝问题求助

解决方案

1. 核心问题定位

Pseudo-terminal will not be allocated because stdin is not a terminal 只是警告,不影响执行;致命问题是 ssh: connect to host ... port 22: Connection refused,重点排查以下几点:

2. 安全组规则补全

GitHub Actions 托管的 Runner 使用动态IP,若你的EC2安全组仅开放了本地IP的22端口访问,会导致GitHub环境无法连接。

  • 测试方案:临时将安全组22端口入站规则设为 0.0.0.0/0(仅限测试,生产环境不推荐),验证是否能连接。
  • 生产方案:通过GitHub官方API获取Actions的IP段,批量添加到安全组入站规则中。

3. 修复私钥写入格式

GitHub Secrets 存储的私钥可能丢失换行符,需用 echo -e 保留原始格式:

echo -e "$EC2_SSH_PRIVATE_KEY" > ~/.ssh/id_rsa

4. 优化SSH命令参数

添加 -T 参数禁用伪终端分配,消除警告;可选 -v 参数开启调试模式,方便排查连接细节:

修改后的Git Action脚本:

- name: Deploy Streamlit to EC2
  run: |
    echo "Deploying Streamlit application..."
    mkdir -p ~/.ssh
    echo -e "$EC2_SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
    chmod 400 ~/.ssh/id_rsa
    ssh -T -o "StrictHostKeyChecking=no" -i ~/.ssh/id_rsa ec2-user@$instance_public_ip << 'EOF'
    sudo apt-get update
    sudo apt-get install -y python3-pip
    # 你的应用部署代码
    EOF
  env:
    EC2_SSH_PRIVATE_KEY: ${{ secrets.EC2_SSH_PRIVATE_KEY }}
    instance_public_ip: ${{ env.instance_public_ip }}

5. 额外排查步骤

  • 在Action中添加端口连通性测试:
    nc -zv $instance_public_ip 22
    
  • 本地连接EC2后,确认SSH服务状态:systemctl status sshd(Ubuntu)或 systemctl status ssh(Amazon Linux)。
  • 检查实例防火墙:确认iptables/ufw未限制22端口访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 04:50:01