惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Martin Fowler
Martin Fowler
WordPress大学
WordPress大学
S
SegmentFault 最新的问题
罗磊的独立博客
Apple Machine Learning Research
Apple Machine Learning Research
The Cloudflare Blog
L
LangChain Blog
博客园 - 司徒正美
G
Google Developers Blog
博客园 - 【当耐特】
GbyAI
GbyAI
月光博客
月光博客
人人都是产品经理
人人都是产品经理
D
DataBreaches.Net
大猫的无限游戏
大猫的无限游戏
A
About on SuperTechFans
Microsoft Azure Blog
Microsoft Azure Blog
V
Visual Studio Blog
D
Docker
MongoDB | Blog
MongoDB | Blog
Vercel News
Vercel News
Stack Overflow Blog
Stack Overflow Blog
Jina AI
Jina AI
博客园 - 聂微东

热爱生活与梦想

迁移LeanCloud的Waline评论数据到TiDB/Neon 25年江浙地区暑假自驾游之感慨 使用阿里云灵码继续完成构建 SSL 证书管理器 亲手给儿子做的棒棒糖摩天轮六一礼物 使用腾讯云 CodeBuddy 构建 SSL 证书管理器 修复代码块默认高度相关缺陷 HugoNexT4.7.2 新功能和升级提示 改善代码块折叠和选中功能 支持Github风格的警告样式 新增音乐短代码功能支持 给文章添加摘要和过期提示功能 回顾24年的过去总结 修复Mathjax行内显示公式的问题 给Hugo文章增加阅读更多跳转的锚点定位功能 Win10隐匿的VPN设置和L2TP连接常见错误 Go语言中“糟糕”的日期时间格式化设计 DaoCloud道客提供的免费Docker镜像代理服务 感谢万能淘宝让自己吃到喜欢的美食 WSL运行时遇到未知异常错误无法使用 隐藏的换行符导致Base64加密解密失败 MySQL自带客户端直接免密登录操作 Linux系统中删除目录软链接的注意项 Java程序调用外网API时CA问题 如何不关机重启WSL2恢复虚拟服务 在Windows上安装Podman容器平台做虚拟化 记一次无法弹出移动硬盘的记录 为友情链接添加自动检测脚本 重新激活Github的2FA认证 Linux中使用tar压缩命令排除文件 继续小米手环的健康生活之旅
Github Action执行时遇到SSH key invalid format错误
凡梦星尘 · 2022-08-11 · via 热爱生活与梦想

Github Action是款非常不错的CI/CD工具,自从它问世以来发展的速度真可谓是快,在 Github 的官方市场中几乎能找到所有你想要使用的Action脚本进行引用。本博客也是基于Github Action进行远程部署的,与常规的Github Pages服务不同,本站的静态文件是部署在国内某云厂商的静态服务器上面的,通过 tzzs/server-shell Action 集成,实现远程执行服务端的命令,来拉取最新生成的静态文件。

具体的Github Action脚本用法参考如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
deploy-cloud:
  runs-on: ubuntu-latest
  steps:
    - name: Deploy Remote Cloud
      uses: tzzs/server-shell@v3
      with:
        IP: ${{ secrets.REMOTE_HOST }}
        USERNAME: ${{ secrets.REMOTE_USER }}
        PRIVATE_KEY: ${{ secrets.REMOTE_PRIVATE_KEY }}
        SHELL:
          "sh /home/develop/myblog-deploy.sh"

这看上去也没有任何的问题,将代码推送到Github仓库也能正常运行。但诡异的事情在大概运行 1 周时间后便出现。在没有调整过 Action 脚本及 SSH 私钥的情况下,上面的部署步骤竟然执行失败,报出如下的错误信息:

1
2
3
4
5
6
7
/usr/bin/ssh server sh /home/***/myblog-deploy.sh
Warning: Permanently added '***' (ECDSA) to the list of known hosts.
Load key "/home/runner/.ssh/deploy.key": invalid format
Permission denied, please try again.
Permission denied, please try again.
***@***: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
Error: Error: The process '/usr/bin/ssh' failed with exit code 255

持着怀疑的态度再次检查了下最新仓库代码,确定只是发布了新文章并没调整过配置文件。然后又直接执行ssh -i命令测试了下 SSH 私钥,也是能正常的连接远程服务,这就有点纳闷的啦,到底是哪里出问题呢?

经过一番网络大战(借助搜索引擎查找资料)后,发现有人提到说检查下 SSH 私钥的类型是否为 RSA 格式,打开的本地生成的id_rsa文件查看内容,果然不是RAS类型,参考如下:

1
2
3
-----BEGIN OPENSSH PRIVATE KEY-----
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-----END OPENSSH PRIVATE KEY-----

大概是早期生成SSH key没有留意直接使用了默认规则,然后使用如下的命令对私钥进行转换:

1
ssh-keygen -m PEM -t rsa -f ~/.ssh/id_rsa

将新生成的私钥进行重新分发,再重新re-load失败的 Action, 果然任务就能正常执行成功。

问题到此是解决了,不过对其的产生还是有些困惑,之前为何就没有这样的情况出现?又仔细过了一遍远程部署的脚本代码,发现执行时需要指定服务器操作系统版本 runs-on: ubuntu-latest ,而这里写的是使用最新版本,估计问题就是在此产生的,猜测可能是最新版本服务器操作系统的OPENSSH是版本较高不兼容所导致的,但没有做进一步的验证。

总结一点,就是生成SSH私钥时还是尽量按照服务方的要求进行操作,如果没有,那么建议还是使用PEM格式的RSA类型较为通用,能够避免未知的风险。 😄