Jenkins“Execute shell”是否可以执行SSH命令?
Jenkins有许多前置和后置构建选项,专门用于SSH类型命令但是我有一个脚本可以同时构建,然后执行SCP和SSH命令。 Jenkins是否强迫用户将构建脚本分解为多个步骤?
“Execute Shell”是我试图执行SSH命令但是我没有成功。
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Trying private key: /var/lib/jenkins/.ssh/identity
debug1: Trying private key: /var/lib/jenkins/.ssh/id_rsa
debug1: Trying private key: /var/lib/jenkins/.ssh/id_dsa
debug1: Next authentication method: password
debug1: read_passphrase: can't open /dev/tty: No such device or address
debug1: Authentications that can continue: publickey,password
Permission denied, please try again.
debug1: read_passphrase: can't open /dev/tty: No such device or address
debug1: Authentications that can continue: publickey,password
Permission denied, please try again.
debug1: read_passphrase: can't open /dev/tty: No such device or address
debug1: Authentications that can continue: publickey,password
debug1: No more authentication methods to try.
Permission denied (publickey,password).
SSH Access not available for build engine
答案 0 :(得分:15)
只要您使用公钥,您就可以通过ssh
发送命令并通过scp
复制文件。我们使用它来生成一些特定的进程并发布某些无法通过现有命令推送的工件。
必须注意您使用的是哪些密钥以及您在远程服务器上寻址的用户。通常,我们在ssh中使用显式-i
参数,并且我们总是使用显式用户名来确保一切按预期进行
ssh -i <key_path> <user>@<fqdn_host> <command>
如果你在脚本中这样做,你应该没问题。当然,密钥文件必须由Jenkins进程读取,您需要确保密钥安装在双方。
我还强烈建议使用ssh的内置策略控件来控制:
特别是,您可以使用作为ssh / scp命令目标的主机上的~/.ssh/authorized_keys
中的设置来限制可以附加(host=
)的主机,甚至可以预加载命令,以便特定键始终只执行一个特定命令(command=
)。
对于真正喜欢冒险的人,您可以指定command=
并将命令发送到受限制的shell命令,该命令限制目录访问或命令访问。
答案 1 :(得分:4)
而不是从&#34;执行shell&#34;中显式执行ssh
命令。步骤,您可以使用现有的Jenkins插件之一: