使用.gitlab-ci.yml时ssh-keyscan写入~/.ssh/known_hosts失败
解决GitLab CI中ssh-keyscan命令失败的问题
以下是针对ssh-keyscan $VM_IPADDRESS >> ~/.ssh/known_hosts执行失败的几种修复方案:
确保环境包含ssh-keyscan工具
有些镜像的openssh包可能不包含ssh-keyscan,直接修改安装命令,明确安装openssh-client:"command -v ssh-agent >/dev/null || ( apk add --update openssh openssh-client )"验证VM_IPADDRESS变量有效性
先在命令前加一行调试输出,确认变量值是否正确:- echo "VM IP is: $VM_IPADDRESS"检查GitLab项目的CI/CD变量,确保
VM_IPADDRESS已正确设置,无多余空格或特殊字符。优化ssh-keyscan命令,屏蔽无关警告
加上哈希化参数并屏蔽错误输出,避免警告信息干扰文件写入:- ssh-keyscan -H $VM_IPADDRESS 2>/dev/null >> ~/.ssh/known_hosts-H参数会哈希化主机名和IP,提升安全性;2>/dev/null过滤掉连接超时或端口错误之外的无关警告。指定非默认SSH端口(如果需要)
如果目标服务器用了非22端口,在命令里加上端口参数:- ssh-keyscan -p $VM_PORT $VM_IPADDRESS >> ~/.ssh/known_hosts记得在GitLab CI变量中配置
VM_PORT。跳过主机密钥检查(应急方案)
若以上方法都无效,可临时跳过主机密钥验证(仅在完全信任目标服务器时使用):- echo -e "Host $VM_IPADDRESS\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
修改后的完整before_script示例
before_script: - "command -v ssh-agent >/dev/null || ( apk add --update openssh openssh-client )" - eval $(ssh-agent -s) - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - - mkdir -p ~/.ssh - chmod 700 ~/.ssh - echo "VM IP is: $VM_IPADDRESS" - ssh-keyscan -H $VM_IPADDRESS 2>/dev/null >> ~/.ssh/known_hosts - chmod 644 ~/.ssh/known_hosts
内容的提问来源于stack exchange,提问作者Jessica
相关产品推荐
相关产品推荐

