在Jenkins流水线中使用SSH凭据进行SSH、SCP或SFTP操作

38

我想使用scp/ssh将一些文件上传到服务器。我发现我需要使用基于证书的身份验证,但问题是如何实现? 实际上,我希望使用与git相同类型的凭据-存储在Jenkins中的密码ssh证书。 但是,我无法弄清楚如何做到这一点-片段生成器没有明显的选项。

其他人怎么做? 是否有一个未记录的功能可以实现这一点?

2个回答

71
    withCredentials([sshUserPrivateKey(credentialsId: "yourkeyid", keyFileVariable: 'keyfile')]) {
       stage('scp-f/b') {
        sh 'scp -i ${keyfile} do sth here'
       }
   }

也许这正是您想要的。安装Credentials PluginCredentials Binding Plugin插件。添加一些凭据,然后您将获得"yourkeyid",将此凭据绑定到keyFileVariable、passphraseVariable等变量中。
有关更多详细信息和文档,请访问Jenkins Credentials Binding PluginCredentials Binding Plugin docsCredentials PluginSSH Pipeline Steps插件的Github网站。

3
我想补充一点,在sh中使用的凭证不应该放在双引号中,而是单引号中,例如sh 'scp -i ${keyfile} do sth here'。https://www.jenkins.io/doc/book/pipeline/jenkinsfile/#interpolation-of-sensitive-environment-variables - SantaXL
完美的解决方案,无需使用第三方模块,避免因支持时间结束而产生问题。 - Rishitha Minol

29
如果您安装了SSH Agent插件,则可以使用ssh-agent管道步骤以活动状态运行带有ssh-agent的Shell脚本。 ssh-agent需要Jenkins凭据ID(像您为Git拥有的那样的带密码的ssh证书)。

1
同意这是一个干净的解决方案 - 但在 Windows 上正确地使 ssh-agent 工作是我个人认为很麻烦。 - Heisenberg
有没有办法获取项目使用的SSH凭据ID的引用?类似于sshagent(credentials: [env.scm_credentials])这样的方式? - undefined
发现了在我的情况下有效的东西:sshagent(credentials: scm.userRemoteConfigs.credentialsId)。这个方法有效是因为我的scm最终是一个GitSCM类。很可能对大多数用户也是如此。https://www.jenkins.io/doc/pipeline/steps/params/gitscm/ - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接