配置不输入密码的SSH连接
===============================================
2020/11/29_第1次修改 ccb_warlock
===============================================
最近构建了一次持续发布环境,其中需要通过ssh密钥配对来实现对另一台服务器的操作,我曾经在17年整理gitlab远程备份时整理了这块的内容,目前将这个内容单独抽出一篇整理,来关联后续的随笔。
示例目标:jenkins服务器可以在不用输入用户名/密码,就可以连接builder服务器执行ssh命令和传输文件的功能。
一、环境准备
1. jenkins服务器(centos7,192.168.1.1)
二、配置SSH密钥配对
本次示例,jenkins服务器需要对builder服务器远程执行一些操作或者远程复制文件,但是都需要输入用户名/密码。
为了解决这个问题,首先需要实现不需要密码的SSH登陆,SSH密钥配对就可以解决这个问题。
2.1 生成密钥对
1)在jenkins服务器上生成rsa证书
ssh-keygen -t rsa
这样,在/root/.ssh下生成id_rsa 和 id_rsa.pub 两个文件,其中公共密钥保存在 /root/.ssh/id_rsa.pub,私有密钥保存在/root/.ssh/id_rsa。
2)jenkins服务器上cp生成rsa公钥
在/root/.ssh下复制备份一份id_rsa.pub 命名为 id_rsa.pub.jenkins,以便拷贝到远程服务器B。
cd /root/.ssh cp id_rsa.pub id_rsa.pub.jenkins
2.2 生成rsa公钥上传到builder服务器
先在builder服务器上创建目录/root/.ssh。
mkdir -p /root/.ssh
使用scp命令进行远程复制,将jenkins服务器生成的id_rsa.pub.jenkins文件拷贝到builder服务器的/root/.ssh目录下。
scp /root/.ssh/id_rsa.pub.jenkins root@192.168.1.2:/root/.ssh/
此时使用scp命令需要输入密码,当把下面的“2.3 密钥配对”执行后,以后jenkins服务器使用scp命令复制文件到builder服务器的话,就不需要输入密码了。
2.3 密钥配对
1)在builder服务器的/root/.ssh下创建authorized_keys文件
touch /root/.ssh/authorized_keys
2)通过 cat 命令 把id_rsa.pub.jenkins 追写到 authorized_keys 文件中
cd /root/.ssh/ cat id_rsa.pub.jenkins >> authorized_keys
3)修改authorized_keys文件的权限
chmod 400 authorized_keys
PS. 如果设置为777,那么登录的时候,还是需要提供密码的。
4)测试是否还需要输入密码
接着来测试下jenkins服务器使用scp复制文件到builder服务器是否还要输入密码。
scp /root/.ssh/id_rsa.pub.jenkins root@192.168.1.2:/root/.ssh/
发现在2.3之前,由于没有设置ssh证书授权认证时,上传需要输入密码;2.3操作完后,由于授权认证,已经不需要输入密码了。