Gitlab CI / CD:使用ssh密钥(使用Windows Shell运行器)部署到ubuntu服务器

时间:2019-08-29 23:03:58

标签: ssh gitlab-ci gitlab-ci-runner

大家好,我需要您的帮助,我正在使用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

预先感谢

2 个答案:

答案 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