大家好,我需要您的帮助,我正在使用gitlab ci / cd并尝试将.jar应用程序部署到ubuntu服务器上,我使用Windows Runner和Shell执行程序配置了gitlab项目。我在运行程序上配置了基于密钥的访问权限,以避免提示输入密码;
当我登录到跑步机并使用它的powershell时,以下命令成功运行:
scp -i C:\Users\Administrators\ssh\id_rsa myapp-0.0.1-SNAPSHOT.jar username@myubuntuserver:/
但是当我在我的.yml文件中使用上述命令复制服务器上的.jar时,直到作业由于超时而失败之前,它都不会给出任何响应
我也通过在项目上设置SSH_PRIVATE_KEY变量来尝试了https://docs.gitlab.com/ee/ci/ssh_keys/此处提出的解决方案,但是我无法将给定的'before_script'适应我的Windows运行程序。
这是文档(上方链接)中建议的before_script:
before_script:
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
以前的scp命令被替换为:
ssh -iv C:\Users\Administrators\ssh\id_rsa username@myubuntuserver
我得到以下输出: the image
预先感谢
答案 0 :(得分:0)
在执行以下步骤后它可以工作:
1)在ubuntu 18.04上配置运行程序(shell执行程序)
2)然后以gitlab-runner用户身份从终端登录:sudo su - gitlab-runner
3)运行ssh-keygen -t rsa
4)运行ssh -i ~/.ssh/id_rsa username@myubuntuserver:
5)运行cat ~/.ssh/id_rsa.pub | ssh username@myubuntuserver "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"
5)现在,您可以将以下内容添加到您的工作脚本(yml文件)中,并且应该可以使用:
- scp -i ~/.ssh/id_rsa fileToCopy username@myubuntuserver:/mydirectory
#you can execute multiple commands at a time, for ex:
- ssh username@myubuntuserver " mv /mydirectory/myapp-0.0.1-SNAPSHOT.jar /mydirectory/myapp.jar "
希望这会有所帮助
答案 1 :(得分:0)
如果ssh -iv C:\Users\Administrators\ssh\id_rsa username@myubuntuserver
不起作用,那可能是由于C:
部分所致,它使ssh混淆为thinkig C是服务器的名称!
类似Unix的路径可以工作:
ssh -iv /C/Users/Administrators/ssh/id_rsa username@myubuntuserver
但是,假设OP Medmahmoud comments作为公钥已在服务器上发布:
在ubuntu18.04上配置跑步者。
然后以gitlab-runner用户身份从终端登录:sudo su - gitlab-runner - run ssh-keygen -t rsa ssh -i ~/.ssh/id_rsa username@myubuntuserver cat ~/.ssh/id_rsa.pub | ssh username@myubuntuserver \ "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"
现在,您的yml文件中的内容应该可以使用:
- scp -i ~/.ssh/id_rsa pom.xml username@myubuntuserver:/mydirectory