如何在GitHub Action中通过SSH访问服务器并正确处理SSH密钥
GitHub Action SSH 密钥配置方案
你不需要依赖GitHub生成密钥,自行在本地生成密钥对后分别配置到服务器和GitHub仓库即可,完整配置步骤如下:
1. 本地生成SSH密钥对
打开本地终端执行命令:ssh-keygen -t ed25519 -C "github-action-auto-deploy" -f ./github-action-ssh
执行时按两次回车跳过passphrase设置(设置密码后工作流无法自动完成SSH校验),执行完成后会在当前目录生成两个文件:
github-action-ssh:私钥文件,需要存储到GitHubgithub-action-ssh.pub:公钥文件,需要上传到目标服务器
2. 配置目标服务器公钥
将公钥文件的全部内容,追加到目标服务器登录账号的~/.ssh/authorized_keys文件末尾,同时确保权限配置正确:
# 服务器端执行 chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
权限配置错误会导致SSH连接被拒绝。
3. 配置GitHub仓库私钥
进入对应GitHub仓库的设置页,依次点击「Settings」→「Secrets and variables」→「Actions」→「New repository secret」:
- 名称填写
SSH_PRIVATE_KEY - 内容填写本地生成的
github-action-ssh私钥文件的全部内容
保存后该密钥会在工作流中以加密形式调用,不会在日志中明文展示。
4. 调整工作流配置
在你现有的工作流yaml文件中,执行自定义脚本的步骤之前,新增SSH配置步骤:
jobs: deploy: runs-on: ubuntu-latest steps: # 拉取代码步骤省略,你原来的配置保留即可 - name: 配置SSH运行环境 run: | mkdir -p ~/.ssh echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519 chmod 600 ~/.ssh/id_ed25519 # 添加目标服务器到可信列表,避免首次连接交互确认 ssh-keyscan 替换为你的服务器IP或域名 >> ~/.ssh/known_hosts chmod 644 ~/.ssh/known_hosts # 这里放你原来执行自定义脚本的步骤 - name: 执行自定义脚本 run: bash ./你的脚本名称.sh
配置完成后你的脚本内的SSH命令就可以正常连接服务器执行操作了。
注意事项
- 绝对不要将私钥明文提交到代码仓库,所有敏感信息必须通过GitHub Secrets存储
- 如果你的SSH服务使用非默认22端口,需要在
ssh-keyscan命令后添加-p 你的SSH端口号参数,同时脚本内的SSH命令也要同步调整端口参数 - 服务器防火墙需要放行GitHub Action的IP段对SSH端口的访问,否则会出现连接超时问题
内容的提问来源于stack exchange,提问作者Maik Lowrey
相关产品推荐
相关产品推荐

