ssh-keygen和ssh-copy-id实现免密登录远程主机

来源:互联网 发布:索尼vr 知乎 编辑:程序博客网 时间:2024/05/16 00:27

       ssh免密登录在实际工作中有重要的作用,甚至有的应用部署也必须要免密登录远程主机,例如hadoop环境搭建。

       免密登录,需要先在本机生成公钥,然后将公钥拷贝到远程主机,拷贝的过程,既可以手动(在远程主机根目录下创建.ssh目录,然后将公钥存入该目录下authorized_keys文件中即可),也可以直接命令操作ssh-copy-id,这个操作做完了,即可免密登录远程主机。

         仔细回想这个过程,先在本机生成公钥,然后将公钥复制到远程主机,接着就可以免密登录远程主机,这个过程似乎与我们想想的不太一样,我们可能希望远程主机免密登录本机。这就好比我要去朋友家,我先将我们家的钥匙放在朋友家,结果我就可以随便进入朋友家里。正常来说,我家钥匙在朋友家里,应该是朋友随便进入我家。通过实验我们来看是什么样的。

这里假定我们需要在node01上远程登录node02机器,这样的话,默认ssh登录,需要输入node02上root用户的密码。如下图所示:

node02上本身是没有.ssh目录的。

一、生成类型rsa免密的公钥。

#ssh-keygen -t rsa -P ""

遇到提示,一路回车即可。

查看刚刚生成的公钥id_rsa.pub

二、将公钥通过命令ssh-copy-id放入node02机器上。

#ssh-copy-id root@node02

执行这一步操作,需要输入node02上root用户登录的密码。

执行成功之后,我们在node02上查看/root/.ssh目录已经生成,并且多了一个名为authorized_keys的文件,里面保存的正是node01上ssh-keygen生成的id_rsa.pub的内容。

三、远程登录node02,无需密码,直接登录成功,如图所示。

另外:免密登录本机也是可以的,默认是需要密码的,只需要将id_rsa.pub拷贝一份保存为authorized_keys。接着ssh登录本机,直接登录成功。

       ssh免密登录的过程我们已经清楚了,现在来说说是怎么回事,为什么和我们想象的不一样。

       ssh-keygen的过程,其实不光生成了id_rsa.pub,同时还生成了id_rsa这个文件,这个文件就是私钥,保存在本机的。ssh远程登录的过程,先是客户端请求远程主机,远程主机根据authorized_keys中本机公钥的内容加密一个请求,返回给客户端,客户端然后利用私钥对这个请求解密,再发送给远程主机,远程主机收到了准确的应答,即认为是该客户端是可信的,因此允许登录。该过程可以通过如下图所示更直观。

       远程主机上的authorized_keys文件中可以保存多个公钥。多个公钥直接追加在末尾。

       了解ssh免密登录的过程,再回过头来,我们发现其实这种方式和远程主机的密码没有任何关系,我们无需知道密码,或者密码随便更改,我们只要保证远程主机有我们的公钥,而我们本地有这么一对公钥和私钥就可以了。

阅读全文
0 0