如何无密码登录SSH

我们在用Jenkins做发布工具的时候,经常用到的功能是通过SSH通道完成各种功能。例如使用scp命令拷贝安装包到服务器上,通过ssh -t命令执行服务器上的脚本等。

这时就需要配置无密码登录,否则无法做到自动执行命令。如果每次都手动输入密码,想想都不现实。要实现无密码登录,需要配置好SSH允许证书登录。

其原理是使用了公钥体系,假设有服务器Server,用户在服务器Client上,用户在服务器Client上有私钥Private Key,在服务器Server上有对应的公钥Public Key。这样访问的时候Server就能够通过公钥体系进行验证:要求用户使用其私钥进行签名,从而确保用户拥有私钥,以此验证用户身份。如下图:

公钥体系原理图

1. 服务器配置

默认SSH的配置已经允许通过证书登录。但是为了安全起见,有些配置可以修改一下(非必须,请根据需要修改):

1
2
PermitRootLogin            # 默认yes,改成no(禁用root通过ssh登录)
PasswordAuthentication # 默认yes,改为no(禁用使用密码认证登录,必须有证书才能登录)

2. 密钥生成

用户密钥的生成使用ssh-keygen命令即可。注意:该命令最好在Client端生成,因为私钥证书需要确保安全性,不要泄露,否则攻击者也就拥有了同样的权限。

1
ssh-keygen -t rsa

ssh-keygen可以生成多种算法类型的密钥,例如rsa, dsa等。一般选择rsa即可。其生成的证书路径保存在~/.ssh文件夹下。按照算法类型进行命名,如果使用RSA算法,则生成的两个文件为:

1
2
id_rsa  私钥文件。确保其文件访问模式为600(只允许当前用户访问)
id_rsa.pub 公钥文件

3. 公钥上传到服务器上

公钥需要上传到服务器上,并添加到Server上某个用户的~/.ssh/authorized_keys文件中。如果文件不存在,可以新建一个。

4. 使用

上述配置好后,就可以使用ssh相关的命令进行无密码操作了。例如:

1
2
scp abc.tar.gz root@192.168.50.81:~
ssh -t root@192.168.50.81 bash /root/deploy.sh abc.tar.gz

热评文章