最近在做基于jenkins的自动化部署,需要将编译出的war包从一台机器拷贝到另一台机器。
不过用scp命令拷贝时,需要输入密码。通过shell解决相对复杂一些。
后来查来查去,发现可以通过在两台服务器之间建立信任关系来实现免密码的拷贝。操作方式如下:
1、在client机器上执行下面的命令,生成本机的安全公钥、私钥
ssh-keygen -b 1024 -t rsa2、将生成在/root/.ssh目录下的id_rsa.pub文件拷贝到目标机器的/root/.ssh目录下,并重命名为authorized_keys。如果该机要和多个机器建立信任,只需要将其他机器的rsa pub key追加到authorized_keys文件的后面即可。
3、再执行scp拷贝时,就不需要密码了。如下图所示:
【补充】
2016-9-8:今天为一个机器增加免密ssh登陆权限,发现拷贝authorized_keys时,提示/root/.ssh目录不存在。手动创建并拷贝后,每次scp仍然要密码。
修改/etc/ssh/sshd_config文件,打开AuthorizedKeysFile .ssh/authorized_keys的注释,service ssh restart重启ssh服务后,问题仍然无法解决。
后来修改/etc/selinux/config,将SELINUX设置成disabled后,重启系统,问题解决。(注:该方法安全性会变差,暂时没研究selinux如何配置来解决此问题)