在带有 ssh、scp 或 sftp 的 jenkins 管道中使用 ssh 凭据

Posted

技术标签:

【中文标题】在带有 ssh、scp 或 sftp 的 jenkins 管道中使用 ssh 凭据【英文标题】:Use ssh credentials in jenkins pipeline with ssh, scp or sftp 【发布时间】:2017-11-06 17:12:02 【问题描述】:

我想使用 scp/ssh 将一些文件上传到服务器。我发现我需要使用基于证书的身份验证,但问题是如何?我真正想做的是使用与 git 一起使用的相同类型的凭据 - 存储在 Jenkins 中的密码 ssh 证书。但是,我不知道该怎么做 - sn-p 生成器对此没有明显的选择。

其他人是做什么的?是否有未记录的功能可以做到这一点?

【问题讨论】:

【参考方案1】:
    withCredentials([sshUserPrivateKey(credentialsId: "yourkeyid", keyFileVariable: 'keyfile')]) 
       stage('scp-f/b') 
        sh "scp -i $keyfile do sth here"
       
   

也许这就是你想要的。安装Credentials PluginCredentials Binding Plugin。添加一些凭据,然后您将获得“yourkeyid”,将此凭据绑定到 keyFileVariable、passwordVariable 等。

更多详细信息和文档可以在 Jenkins Credentials Binding Plugin、Credentials Plugin、SSH Pipeline Steps 插件的 Github 站点上找到

【讨论】:

我想补充一点,sh 中使用的凭据不应放在双引号之间,而应放在单引号之间,即sh 'scp -i $keyfile do sth here'。 jenkins.io/doc/book/pipeline/jenkinsfile/…【参考方案2】:

如果您安装了SSH Agent plugin,您可以使用ssh-agent 管道步骤来运行一个启用了ssh-agent 的shell 脚本。 ssh-agent 需要一个 Jenkins 凭据 ID(一个带密码的 ssh 证书,就像你为 git 所拥有的一样)。

【讨论】:

同意这是一个干净的解决方案 - 但是让 ssh-agent 在 Windows 上正常工作是一个痛苦的 IMO。

以上是关于在带有 ssh、scp 或 sftp 的 jenkins 管道中使用 ssh 凭据的主要内容,如果未能解决你的问题,请参考以下文章

ssh介绍及scp,sftp应用

ssh scp sftp简易用法

SSH,SCP,SFTP命令汇总

ssh远程访问控制,scp,sftp,TCP Wrappers策略应用案例

ssh远程访问控制,scp,sftp,TCP Wrappers策略应用案例

SCP——传输文件的命令