背景
Jenkins服务器运行在一台主机上,但实际的运行环境在另一台主机上,Jenkins要做的事是远程控制主机何时运行脚本,以及将运行后的结果显示在Jenkins上。
什么是SSH
ssh是一种网络协议,用于计算机之间的加密登陆。如果一个用户从本地计算机,使用SSH协议登陆另一台远程计算机,我们就可以认为这种登陆是安全的,即使被中途截获,密码也不会泄露。
步骤
(1)首先查看主机上SSH服务是否启动
通过ps -ef | grep ssh查看ssh服务是否运行,进程名为sshd。
如果没有运行,可以通过service sshd start命令来运行。
如果没有安装opensshserver,通过apt-get install opensshserver命令安装软件。
通过ssh hostname@hostip来连接远程主机。第一次连接时,系统会提示以下信息:
The authenticity of host '192.168.56.102 (192.168.56.102)' can't be established.ECDSA key fingerprint is ****************.Are you sure you want to continue connecting (yes/no)?
上面的信息显示:无法确认主机192.168.56.102的真实性,不过知道它的公钥指纹,是否继续连接?
之所以会出现这样的信息,是因为client端无法保证接收到的公钥就是目标server端的,如果一个攻击者中途拦截client的登陆请求,向其发送自己的公钥,client端用攻击者的公钥进行数据加密,攻击者接受到加密信息后再用自己的私钥解密,就窃取了client的登陆信息了。
输入yes之后,该host就会被确认,并被追加到文件known_hosts中,然后就需要输入该host的密码。
更多关于SSH加密的详细信息,请参考SSH原理
(2)设置免密登陆
以后每次登陆都需要输入对方的密码,很麻烦。所以需要设置免密登陆:
首先在Jenkins server上生成一对密钥:
#sudo -u jenkins ssh-keygen -t ecdsa#cd /var/lib/jenkins/.ssh#cat id_ecdsa.pub >> authorized_keys#chmod 0600 authorized_keys
这时你就会看到目录下有两个文件 id_ecdsa(私钥),id_ecdsa.pub(公钥)。然后把authorized_keys文件拷贝到remote host的~/.ssh/目录下
(3)Jenkins配置
首先下载Publish over SSH 插件。
在全局设置里滑到最底部
在Path to key 里填入之前生成的id_ecdsa文件的绝对路径,再配置一下SSH Servers,配置好之后,点击Test Configuration,如果出现SUCCESS,那么表示配置成功。
这里Name就是上图填的SSH server name。在Exec command里填入shell命令,就可以将shell命令通过SSH传给remote host啦。