实现多个ssh服务器的免密码登陆

前言·原理

无论是登陆服务器进行运算,还是登陆git托管的服务器进行代码的管理,都需要使用ssh的方式进行登陆。

那么ssh登陆的 验证方式常用的有,两种。

第一步,我们审问服务器

连接服务器时,服务器把自己的公钥发给我们,由于公钥较长,为了降低验证的难度,使用MD5或者sha256进行digest生成服务器的指纹,与本地里面已经储存的模式来进行匹配,之前没存储,就会提醒我们,这台机器不可信,是否要继续连接。

选择 yes 就会把这台服务器添加到known_hosts中

第二步,服务器审问我们

下图我们可以看到,ssh服务器所采取的验证方式,主要有4种,最最倾向的方式是公钥验证。因为公钥验证可以提供常规密码不能比拟的长度。

服务器会按照上面的四种方式,先去寻找public key发现下面任何一种情况,公钥验证都会失败,会转入密码验证步骤

电脑上没有找到公钥(RSA,DSA 或者ECDSA)

公钥找到了,但是没找到同名的私钥

公钥私钥都在,服务器的中不存在这个公钥记录

即使公钥已经存在了服务器上,还需要进行验证。服务器给我们发送一段随机字符串,本地对这个字符串使用自己的进行加密,回传给服务器。 服务器对这段加密对字符串用client的提供的公钥进行解密,如果与最初发送的随机字符串匹配,才算验证通过。 由于公钥和私钥是匹配的,不知道私钥,就无法进行正确的加密,也就无法通过验证。

TO-DO LIST

知道了原理之后,我们就可以着手准备材料了

根据原理我们发现,最重要的是一对相辅相成,互为加密解密对公钥和私钥,它们就表明了我们的身份,见钥如见人。

1. 生成密钥 (本地进行)

生成对方法可以用

基本最常用的就是这4个参数。

自定义密钥的路径和名称,如果不指定,一般就会直接在~/.ssh下面创建 id_rsa 和 id_rsa.pub, ssh 服务器验证的过程中如果没有发现手动指配的key,也会默认去搜索这个名字的公钥私钥

加密的算法,默认是使用rsa,也可以选择dsa, ecdsa

设置密码,如果设置了密码,只有输入密码才能够使用私钥

comment,给自己的备注,提醒这对密钥是干啥用的

上面的几个参数,都可以留空不填。都有自己的默认值。

2. 把公钥交给服务器管理员,或者自己添加到文件中

服务器端,首先我们要确定的是,已经安装并开启了sshd服务

只需要把我们本地的公钥添加到文件中去,,服务器端的设置就完成了

no more 密码!直接即可登陆

3. 进阶讲究人,不同服务器用不同的key登陆

虽然这个意义不是特别大,但有的时候,就是不想所有登陆的服务器都使用同一对密钥。

我个人能想到的好处就是

可以不用输入完整的站点名称了。。。

可以把密钥 放到其他的移动设备上,不用明晃晃的放在.ssh目录下

实现的方法就是在本地的文件夹下建立一个config文件,内容如下。

每一个Host 就是一台服务器,可以自定义个名称,比如s1,s2

HostName 是主机的地址,可以是网址,也可以是IP地址

User,就是你在服务器的登陆用户名

IdentityFile 就是指定登陆该主机使用哪一对key的具体路径

此时,你登陆服务器的时候,就可以用

代替

扩展

1. ssh-keygen 的参数,对私钥的使用加以限制

这里需要注意的是参数, 可以理解为存放钥匙的保险柜的钥匙。。。 就是每次要使用密钥的时候,还需要再验证一下这个密码(passphrase)

这边注意的是,这个passphrase 和你要登陆的服务器的登陆密码没有一毛钱关系,使用ssh-key登陆,就算你完全不知道自己的服务器登陆密码都没有关系。

当然,你也可以留空不填,那么,只要私钥存在,就直接可以登陆成功

2. 允许一段时间内无限访问私钥

我既想把私钥文件加密(也就是设置了-P 参数),又不想每次连接服务器都输入一遍这个密码,会不会挨揍?

这个也是ok的,方法就是使用

意思就是把这个私钥加入到当前的缓存中,只在运行ssh-add的这一次要求你输入passphrase验证一遍,在重启之前,或者手动清除出缓存之前,都可以访问私钥

3. 清除缓存中保存的私钥

经过测试发现,一旦把私钥保存到了缓存里,即使把私钥删除了,也照样可以登陆。。。

用完之后,还是想着能够清除才好,毕竟电脑不会经常重启,方法如下

即可

4. 在服务器开启立ssh服务,顺便让sftp可用

以操作系统为centos为例,其他的系统也类似,只是安装sshd的命令不同而已

可以看到系统中ssh安装包

如果没有安装,则可以手动安装

OpenSSH的主配置文件:, 常见的配置如下

PubkeyAuthentication yes #允许使用公钥进行验证RSAAuthentication yes#允许使用RSA验证AuthorizedKeysFile.ssh/authorized_keys #指定授权文件的位置

,查看22端口是否打开,如果找开,则证明SSH服务开启了。

安装好之后,启动服务

开启sshd

查看服务是否启动

查看工作的状态

此时,你不光可以使用ssh服务远程登陆,你还拥有了一台sftp的服务器

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180625G04HR600?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券