Github Action SSH连接失败问题排查与求助
解决Github Action SSH连接VPS失败问题
问题核心原因分析
- 公私钥混淆:你在Github Secrets中存储的是公钥,但Action需要使用私钥进行SSH认证;同时代码中变量名
SSH_PRIVATE_KEY对应的值是公钥的Secret,完全搞反。 - Runner路径误解:Github Action的
ubuntu-latestrunner是云端的临时机器,并非你的VPS,所以/home/adam/.ssh/id_rsa这个路径在runner上根本不存在,无法直接引用。 - 公钥存放错误:你将公钥放到了
/root/.ssh/authorized_keys,但登录用户是adam,公钥必须放在/home/adam/.ssh/authorized_keys才能被识别。 - 权限配置错误:
.ssh目录的权限应该设为700(需要执行权限才能进入目录),而你设置成了600,导致SSH无法读取目录内的密钥文件。
分步解决方案
一、修正VPS端配置
- 移动公钥到正确路径并设置权限:
# 确保adam用户的.ssh目录存在 mkdir -p /home/adam/.ssh # 复制公钥到adam的authorized_keys(如果之前已复制到root目录) cp /root/.ssh/authorized_keys /home/adam/.ssh/ # 修改文件所属用户和权限 chown adam:adam /home/adam/.ssh/authorized_keys chmod 600 /home/adam/.ssh/authorized_keys - 修正
.ssh目录权限:chmod 700 /home/adam/.ssh
二、修正Github Action配置
更新Github Secrets:
- 把你生成的SSH私钥(
id_rsa文件内容)添加到仓库的Secrets中,命名为VPS_SSH_PRIVATE_KEY。
- 把你生成的SSH私钥(
修改Action代码:
需要在runner中临时创建私钥文件,设置正确权限后再执行SSH连接:name: Run script on VPS on: push: branches: [master] jobs: run-script: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: Setup SSH key env: SSH_PRIVATE_KEY: ${{ secrets.VPS_SSH_PRIVATE_KEY }} run: | # 创建runner上的.ssh目录 mkdir -p ~/.ssh # 将私钥写入文件 echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa # 设置私钥权限(必须600,否则SSH会拒绝使用) chmod 600 ~/.ssh/id_rsa - name: Run script on VPS run: | ssh -o StrictHostKeyChecking=no \ -o PasswordAuthentication=no \ -i ~/.ssh/id_rsa \ adam@your_vps_ip \ "bash /home/adam/script.sh"
三、额外验证点
- 确认私钥内容完整,没有在复制到Github Secrets时丢失换行或字符。
- 验证VPS的SSH配置文件(
/etc/ssh/sshd_config)中开启了公钥认证:确保PubkeyAuthentication yes,且没有限制adam用户的登录权限。 - 重启VPS的SSH服务确保配置生效:
systemctl restart sshd
内容的提问来源于stack exchange,提问作者Adam Garchi
相关产品推荐
相关产品推荐

