GitHub Actions中SSH执行cat命令无输出及命令未找到问题求助
问题排查与解决步骤
1. 先确保私钥正确写入文件
你遇到的cat无输出问题,大概率是私钥写入时就出了错——引号混用导致环境变量解析异常,或者特殊字符被截断:
- 错误写法的核心问题:
ssh chefnode -t 'echo "$INFRA_PRIVATE_KEY" > "/home/'$SSH_NODE_USER'/.ssh/id_rsa"'中,$INFRA_PRIVATE_KEY会被远程服务器解析(但远程没有这个变量),而$SSH_NODE_USER被本地runner解析,导致写入的内容为空或不完整。 - 正确写入方式:用双引号包裹整个SSH命令,让GitHub Actions先解析变量,同时用
printf避免echo处理换行的缺陷:- name: Write private key to remote server run: | ssh chefnode -t "printf '%s' '${INFRA_PRIVATE_KEY}' > /home/${SSH_NODE_USER}/.ssh/id_rsa"
2. 正确执行cat命令查看内容
之前的命令错误多源于引号使用不当或变量解析逻辑错误,试试以下几种可靠写法:
- 让GitHub Actions先解析
$SSH_NODE_USER(推荐):- name: Check id_rsa content run: | ssh chefnode -t "cat /home/${SSH_NODE_USER}/.ssh/id_rsa" - 若远程服务器已定义
SSH_NODE_USER变量,让远程解析:- name: Check id_rsa content run: | ssh chefnode -t 'cat /home/$SSH_NODE_USER/.ssh/id_rsa' - 修复之前的
cd命令错误(分号后多余引号导致命令识别失败):- name: Check id_rsa via cd run: | ssh chefnode -t "cd /home/${SSH_NODE_USER}/.ssh && cat id_rsa"
3. 额外排查点
- 检查文件权限与存在性:写入私钥后需设置600权限,同时可通过
ls确认文件是否存在:- name: Verify file and permissions run: | ssh chefnode -t "chmod 600 /home/${SSH_NODE_USER}/.ssh/id_rsa && ls -l /home/${SSH_NODE_USER}/.ssh/ && cat /home/${SSH_NODE_USER}/.ssh/id_rsa" - 若出现
cat command not found,使用绝对路径执行(避免远程PATH配置问题):- name: Check id_rsa with absolute path run: | ssh chefnode -t "/bin/cat /home/${SSH_NODE_USER}/.ssh/id_rsa"
内容的提问来源于stack exchange,提问作者RAnand
相关产品推荐
相关产品推荐

