Github Actions中SSH命令触发libcrypto错误的问题求助
解决Github Actions SSH私钥加载失败(error in libcrypto)问题
问题核心
本地ubuntu:latest镜像中测试SSH私钥连接正常,但Github Actions执行时出现私钥加载错误,最终导致权限拒绝,错误提示为Load key "/home/runner/.ssh/private.key": error in libcrypto。
解决方案
1. 检查Github Secrets中私钥的格式
- 私钥为多行文本(如带
-----BEGIN OPENSSH PRIVATE KEY-----和-----END OPENSSH PRIVATE KEY-----的PEM格式),粘贴到Secrets时必须完整保留所有换行,不能手动替换成空格或丢失换行。 - 正确操作:直接打开本地私钥文件,全选复制所有内容(包括首尾标识行和中间换行),粘贴到Github Secrets的输入框中,不做任何格式修改。
2. 修改私钥写入命令,避免换行丢失
原工作流中echo命令会将私钥的换行转换为空格,导致私钥格式损坏,改用printf或echo -e写入:
- run: printf "%s" "${{ secrets.STAGING_KEY }}" > ~/.ssh/private.key
或:
- run: echo -e "${{ secrets.STAGING_KEY }}" > ~/.ssh/private.key
3. 强化目录与文件权限设置
确保.ssh目录和私钥文件的权限符合SSH要求,补充目录权限设置:
- run: mkdir -p ~/.ssh/ - run: chmod 700 ~/.ssh/ - run: printf "%s" "${{ secrets.STAGING_KEY }}" > ~/.ssh/private.key - run: chmod 600 ~/.ssh/private.key
4. 验证私钥本身的有效性
将Secrets中的私钥复制到本地文件,执行以下命令验证是否可正常解析:
ssh-keygen -y -f private.key
如果命令报错,说明私钥本身损坏,需重新生成标准格式的私钥(推荐ED25519格式):
ssh-keygen -t ed25519 -f staging_key -N ""
5. 第三方SSH Action的正确配置
如果使用appleboy/ssh-action,确保私钥参数正确传递,Action会自动处理权限和格式:
- name: SSH to staging server uses: appleboy/ssh-action@v1.0.3 with: host: ${{ secrets.STAGING_HOST }} username: ${{ secrets.STAGING_USER }} port: ${{ secrets.STAGING_PORT }} key: ${{ secrets.STAGING_KEY }} script: whoami
内容的提问来源于stack exchange,提问作者Q_Nick
相关产品推荐
相关产品推荐

