ssh无密码登录原理及配置步骤

来源:互联网 发布:php 二维数组 push 编辑:程序博客网 时间:2024/06/06 03:02

是否在为每次登录服务器都要输入密码感到烦恼,想不想一次配置,以后直接免密码登录~~来,心动不如行动动!

需求:A机器想要从此以后免密码登录到B机器(ssh username@IP(B)直接登录,不再要求输入密码)

原理

参考公钥(yue,四声)和私钥

既然要A机器免密码登录B机器,那么A机器只是不用密码这种方式作为验证自己用户身份的方式了,而是换成了连接过程中的加密和解密验证。

简单说来,我们作免密码登录的配置过程,就是在和B机器说:以后凡是A机器来登陆,你确认是他的身份后,就让它直接上你就行了~

那么关键就是,如何确认A机器的身份?这里就涉及到公钥和私钥的知识。

公钥和私钥都是成对出现的,它们顾名思义是一对钥匙,钥匙既可以用来解锁(开锁),也可以用来加锁(关锁)。在网络上我们传输重要信息,如银行卡的账户密码时,一般都是需要在传输过程加锁,传输到目的地后解锁的,这样可以防止过程有人抓包,直接截获了重要信息。另外,也要防止一点是,有人截获数据包后,恶意发送假的数据包到对面,破坏两边原本正常的沟通。

综上,安全的隐秘交流的关键在于确认两点:

  • 只有有钥匙的人可以解开我的密文。
  • 密文是我发的,不是别人冒充发的。

而一种比较传统的加锁解锁方式是想要保证安全通信的两个人用相同的钥匙common_key,不管谁要发一个消息,先对消息明文用钥匙进行加密,使之变成密文,然后通过媒介将密文传输给对方,对方再用他手上的钥匙对密文进行解密,变回明文即可。

这种方式成为【对称加密】,因为两方的钥匙是相同的。

对称加密方式当然满足了【安全的隐秘交流】的第一个要求,即只有有钥匙的人可以解开密文,但是第二个要求就难以满足了,因为一旦有第三个人从这两个人中任意一个那里偷到了钥匙,他就也可以截获传输的密文,并进行解密了,甚至发假密文给对面,这样就不安全了。

于是更安全的【非对称解密】应运而生。

非对称解密即通信的两个人,每个人手上各有两把独一无二的钥匙,分别称为公钥(public_key)和私钥(private_key)。公钥和私钥都可以对消息进行加密和解密,并且,公钥加密的密文只有用对应的私钥才能解锁,而私钥加密的密文也只有对应的公钥才能解锁。而不同之处在于,公钥顾名思义,可以给公开的,可以给任何其他人的,而私钥不行,只能它本身的主人一个人拥有。

那么非对称加密如何保证【安全的隐秘交流】的两点同时满足呢?

首先,如果A想给B传信息,那么首先需要用B的公钥给明文加密,以保证只有拥有私钥的B本人可以解锁密文。另外,A会用自己的私钥给密文再加一次锁,这样B在收到密文时,就需要先用A的公钥给密文解锁,如果解锁成功,说明没毛病,这个密文是A发的。如果解锁失败,说明是有人冒发的。那么,通过这种非对称加密的方式,我们就实现了真正的安全交流。

不过,基本满足了【安全的隐秘交流】之后,依然还有问题,依然还是可以有心怀不轨之人偷私钥来搞事呀?(公钥没必要偷,本来就是公开的,偷了也干不了什么坏事,可以用逻辑想一想)这种可能确实存在,永远没有绝对安全的通信方式(你也可以用刀架在人脖子上要密钥嘛不是),但是相对来说,这种可能性已经很小了。再说,如果第三人想窃听两个人的私密交流,就必须偷到两边的私钥,只有一边的私钥的话就只能解密这一方的密文,这就比原来对称加密随便偷一边的钥匙就可以完全操控交流过程安全多了。

回到ssh登录的问题:

我们想要A机器免密码登录到B机器,那么B机器要确认是A的身份,只要B机器拿A的公钥去尝试解密A发过来的、A用自己私钥加密的密文,能解密成功不就说明是A了。

所以,我们接下来的配置的主要工作也就是:

1.A机器生成私钥和公钥

2.将A机器的公钥给到B机器,并将A机器的公钥写到一个B机器的特权文件里,凡是写到这个特权文件里的公钥对应的机器,都可以通过非对称加密,即免密码的形式登录B机器。

既然原理都搞清楚了,来,开始干活~

步骤

A机器生成私钥和公钥

A机器在shell中输入命令:

ssh-keygen -t [-rsa/-dsa] [-P '']

t参数表示选择加密类型,可以使用:”rsa1”(SSH-1) “rsa”(SSH-2) “dsa”(SSH-2),选择其中一个就可以,不写的话默认为dsa方式。

P参数表示输入旧的密语passphrase。这个密语是指对已有的密钥设置的访问密码,防止其他人随意篡改。因为之前没有生成过本机密钥,所以密语肯定也是没有的,因此我们直接用两个单引号”表示没有旧密语。当然也可以不要P这个参数,不过那就会需要你后面再输入旧的密语,你就得按三次回车,加了这个参数,按一次回车就ok了。

命令执行完成后(假设选择生成rsa类型密钥),会在机器默认的根目录下生成一个隐藏文件.ssh,需要你使用list -a才能看到,进入.ssh文件,你会看到两个文件,一个id_rsa表示A机器私钥,一个id_rsa.pub表示A机器的公钥。

同样地,先登录到B机器上,并也调用相同的ssh-keygen命令,在B机器上也生成.ssh和密钥文件。

拷贝A机器公钥到B机器,并写入authorized_keys

跨机器拷贝用scp命令即可。

scp ./id_rsa.pub(公钥在A机器上的路径) username@IP(B机器IP或域名):/root/(随便先放一个B机器的路径下都可以)

scp传输完成后,登录B机器,然后用cat命令将A机器的公钥信息id_rsa.pub的内容追加到B机器的权限文件authorized_keys中,全线文件在B机器的.ssh下。(如果B机器的.ssh下没有全线文件,直接vi或者touch生成一个新文件,命名为authorized_keys就可以)

cat ./id_rsa.pub >> /root/.ssh/authorized_keys

另外,为了满足ssh安全协议的要求,还需要两个权限设置操作:

chmod 700 ./.sshchmod 600 ./.ssh/authorized_keys

大功告成,现在你应该就可以通过A机器免密码登录B机器了~~

原创粉丝点击