我的要求是这样的: jenkins安装在一台服务器上(比如服务器A)。 我在此服务器中有3个脚本用于将战争部署到不同的服务器中,如 B和C 。
有一个主要的剧本说 JenkinsMainScript.sh 。在此脚本中,我已根据执行shell时传递的参数将部署脚本(例如 serverB.sh/serverC.sh )从服务器A复制到Corresponding服务器serverB或serverC,如:
/root/Pictures/JenkinsTesting/JenkinsBuildMain.sh B
在jenkins" 执行shell "在" 构建"一份工作的 jenkins 部分 其中B是要部署的服务器名称。 即如果我再次在上面的语句中传递C作为参数,那么主脚本会将serverC.sh从服务器A复制到服务器C并将war部署到该服务器中 注意: - 所有部署步骤都写在服务器C的serverC.sh和服务器B的serverB.sh中。
再次我的部署在jenkins中有两个步骤, Job1和Job2。
1.创建war文件,将source作为git存储库,即使用SSH访问(比如服务器D) 2.成功执行Job1后,它将触发Job2。
在Job2中我正在构建部分下执行JenkinsBuildMain.sh文件。
问题是如果我在jenkins的.ssh目录中添加id_rsa和id_rsa.pub文件来访问git服务器(服务器D),同时我无法通过SSH连接访问服务器B之类的其他服务器进行部署。 如果我在.ssh中为部署服务器(服务器B)添加id_rsa和id_rsa.pub文件,那么Git服务器将无法同时访问。 这意味着一次只能使用SSH连接访问一台服务器。
有没有办法使用相同的密钥或不同的密钥访问两台服务器?
或者我们可以为ssh连接添加多个密钥,以便它可以访问服务器,服务器D 用于git clone,服务器B用于将脚本文件从jenkins服务器复制到服务器B
当我这样做时,我得到了Bellow消息: "主机密钥验证失败。 失去联系"
当前我可以一次连接一台服务器。如果它连接到Git服务器,shell脚本文件无法复制,说上面的错误,如果我能够设置复制文件git Server无法访问说
返回状态码128。 权限被拒绝(PublicKey,gssapi-keyex,gssapi-mic,密码)....
有没有办法使用Jenkins为不同服务器的ssh连接添加多个密钥?
Bellow是我的脚本代码,用于将部署脚本复制到远程服务器。
JenkinsMainScript.sh:
if [ $serverId = 'B' ]
then
scp $scriptSourcePath/serverB.sh $serverBPathToCopyTheFile/
ssh -l $serverBUserName $IpAddr $serverBPathToExecuteTheFile/serverB.sh
else
echo " No Matching condition found..."
fi
这是Jenkins for job2中配置的屏幕截图:
任何人都可以帮助我。 提前致谢
答案 0 :(得分:0)
您可以将此scp $scriptSourcePath/serverB.sh $serverBPathToCopyTheFile/
作为参数传递,而不是使用默认的~/.ssh/id_rsa
私钥文件直接执行private key
。
scp
,ssh
都接受私钥文件作为参数。为此目的使用参数-i <file path>
。您可以man ssh
了解所有命令行选项。希望这对你有意义。
ssh -i <private key file path> ...
scp -i <private key file path> ...
man ssh
显示选项i
的以下结果。
-i identity_file
Selects a file from which the identity (private key) for public key authenti-
cation is read. The default is ~/.ssh/id_dsa, ~/.ssh/id_ecdsa,
~/.ssh/id_ed25519 and ~/.ssh/id_rsa. Identity files may also be specified on
a per-host basis in the configuration file. It is possible to have multiple
-i options (and multiple identities specified in configuration files). If no
certificates have been explicitly specified by the CertificateFile directive,
ssh will also try to load certificate information from the filename obtained
by appending -cert.pub to identity filenames.
man scp
显示选项i
的以下结果。
-i identity_file
Selects the file from which the identity (private key) for public key authen-
tication is read. This option is directly passed to ssh(1).