Jenkins服务器运行在一台主机上,但实际的运行环境在另一台主机上,Jenkins要做的事是远程控制主机何时运行脚本,以及将运行后的结果显示在Jenkins上。
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啦。