我试图通过 ssh 部署 master 分支,但在执行以下步骤后:https://medium.com/@hfally/a-gitlab-ci-config-to-deploy-to-your-server-via-ssh-43bf3cf93775 got:
我的脚本:
before_script:
- sudo apt-get update -qq
- sudo apt-get install -qq git
# Setup SSH deploy keys
- 'which ssh-agent || (sudo apt-get install -qq openssh-client )'
- eval $(ssh-agent -s)
- ssh-add <(echo "$SSH_PRIVATE_KEY")
- mkdir -p ~/.ssh
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
deploy_staging:
type: deploy
environment:
name: staging
url: serverIp
script:
- ssh -t -t user@serverIp "cd var/www/ && git checkout master && git pull origin master && exit"
only:
- master
是的,我已经生成了一个私有 ssh 密钥,将它保存在 SSH_PRIVATE_KEY
变量中,我去了 ~/.ssh/authorized_keys
并将公钥放在那里,我已经进入了安装了 Runner 的服务器并且给了ssh user@serverIp
并输入,但是在pipeline里面总是报错,我什至考虑把ssh-keygen
放到pipeline中,但是因为需要输入,所以没用
注意:
答案 0 :(得分:1)
我不建议关闭 hostKeyVerification,因为您想确定要连接到哪个服务器等。
相反,我建议配置一个名为 KNOWN_HOSTS
的 CI 变量,其中包含以新行分隔的所有主机名,例如
host1.com
host2.com
如果设置了环境变量,您可以在 .gitlab-ci.yml
中添加以下脚本以自动添加主机密钥。它使用 ssh-keyscan
将所有密钥添加到您的已知主机文件中。
- echo "Configuring known hosts based on the CI Variable `KNOWN_HOSTS`"
- |
[[ ! -z "$KNOWN_HOSTS" ]] && echo "$KNOWN_HOSTS" | xargs -n 1 -I '{}' ssh-keyscan '{}' >> $HOME/.ssh/known_hosts || echo "KNOWN_HOSTS not set"