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
相关产品推荐
相关产品推荐

