我们在用Jenkins
做发布工具的时候,经常用到的功能是通过SSH
通道完成各种功能。例如使用scp
命令拷贝安装包到服务器上,通过ssh -t
命令执行服务器上的脚本等。
这时就需要配置无密码登录,否则无法做到自动执行命令。如果每次都手动输入密码,想想都不现实。要实现无密码登录,需要配置好SSH允许证书登录。
其原理是使用了公钥体系,假设有服务器Server,用户在服务器Client上,用户在服务器Client上有私钥Private Key,在服务器Server上有对应的公钥Public Key。这样访问的时候Server就能够通过公钥体系进行验证:要求用户使用其私钥进行签名,从而确保用户拥有私钥,以此验证用户身份。如下图:
1. 服务器配置
默认SSH的配置已经允许通过证书登录。但是为了安全起见,有些配置可以修改一下(非必须,请根据需要修改):
1PermitRootLogin # 默认yes,改成no(禁用root通过ssh登录)
2PasswordAuthentication # 默认yes,改为no(禁用使用密码认证登录,必须有证书才能登录)
2. 密钥生成
用户密钥的生成使用ssh-keygen
命令即可。注意:该命令最好在Client端生成,因为私钥证书需要确保安全性,不要泄露,否则攻击者也就拥有了同样的权限。
1ssh-keygen -t rsa
ssh-keygen可以生成多种算法类型的密钥,例如rsa, dsa等。一般选择rsa即可。其生成的证书路径保存在~/.ssh文件夹下。按照算法类型进行命名,如果使用RSA算法,则生成的两个文件为:
1id_rsa 私钥文件。确保其文件访问模式为600(只允许当前用户访问)
2id_rsa.pub 公钥文件
3. 公钥上传到服务器上
公钥需要上传到服务器上,并添加到Server上某个用户的~/.ssh/authorized_keys
文件中。如果文件不存在,可以新建一个。
4. 使用
上述配置好后,就可以使用ssh
相关的命令进行无密码操作了。例如:
1scp abc.tar.gz root@192.168.50.81:~
2ssh -t root@192.168.50.81 bash /root/deploy.sh abc.tar.gz