首页 新闻 会员 周边

Ubuntu下SSH无密码连接的具体实现细节是怎样的呢?

0
悬赏园豆:50 [已解决问题] 解决于 2016-06-17 16:58

SSH无密码连接的实现具体细节是怎样的呢?

   我的电脑是Windows7 64位操作系统,为了学习扩展到了12GB内存。

         安装了VMware Workstation Pro,在虚拟机中先安装了一个Ubuntu16.04的64位操作系统,并成功安装了VMware Tools。然后复制了硬盘中的虚拟机文件为另外两份,并且打开了这三个虚拟机。另外两个虚拟机因为都是复制的第一个虚拟机,所以这三个虚拟机此时是一模一样的,用户名都是boss,登录密码也都是一样的。

         我将第一虚拟机的hostname改为zs-master,将另外两个虚拟机的hostname改为zs-slave1和zs-slave2,这样三个虚拟机中的命令行提示符分别是:

(i) boss@zs-master:~$ (ii) boss@zs-slave1:~$  (iii) boss@zs-slave2:~$

 

(1)为了实现从主机登录从机,我参考书籍和网上的教程,先是分别在三个虚拟机上安装了SSH软件: sudo apt-get install ssh

 

(2)并且我修改了三个虚拟机中的/etc/hosts文件,将master,slave1,slave2 分别对应到三个虚拟机的局域网地址192.168.1.XXX ,然后分别在三个虚拟机的命令行中测试:

ping master -c 2

ping slave1 -c 2

ping slave2 -c 2

均ping成功。说明网络是导通的------我之前将虚拟机的网络设置成了桥接。

每次重启虚拟机后我都会重新用ifconfig命令查询动态生成的ip地址,然后修改三个虚拟机中的/etc/hosts文件中对应的ip。

 

(3)我在master主机上输入如下命令:

boss@zs-master:~$ ssh boss@slave1

提示要求我输入boss@slave1的密码,我输入了zs-slave1的boss用户的登录密码,显示登录成功,但是命令提示符仍然是 boss@zs-master,而不是期望的 boss@zs-slave1。我输入 ls 命令,列出的都是 master主上的/home/boss 文件夹下的文件,而不是 slave1 主机上 /home/boss 文件夹下的文件(因为三个虚拟机完全一样,所以我在master主机的/home/boss 文件夹下建立了一个 this is master 文档,在slave1 和 slave2 相应的地方建立了this is slave1 和 this is slave2 文档,以便用ls命令能区别出当前登录到的主机到底是目标主机还是当前主机),这说明应该没有登录成功吧(图中红色方框所示)?

 

输入exit退出,命令终端并没有退出,而是显示注销,slave1 的连接关闭:

这似乎又说明登录是成功的吧,但为什么命令提示符不是 boss@zs-slave1:~$ 呢?

这时候应该是又真正退回到了master主机吧。再输入exit退出命令终端。

 

(4)上一步的操作在master主机上的 /home/boss 文件夹下自动生成了 .ssh文件夹,cd .ssh 进入,ll (两个小写的L) 命令列出所有文件,看到有一个 know_hosts文件。

为了按照网上教程逐步操作,我删除了master主机上的 .ssh 文件夹

然后按照这个网页https://help.ubuntu.com/community/SSH/OpenSSH/Keys 的指示生成了公钥和密钥:

boss@zs-master:~$ mkdir .ssh

                     chmod 700 ~/.ssh

                     ssh-keygen -t rsa

                  <回车,其中要我为私钥输入密码(passphrase)的地方,我确实输入了一个passphrase,生成id_rsa , id_rsa.pub>

boss@zs-master:~ $ cat  ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys

 

用ll .ssh命令查看 .ssh文件夹下的文件:

 

 

用sudo service ssh restart 命令重启ssh服务:

 

这时候再测试单机回环地址免密码登录:

boss@zs-master:~$ ssh localhost

要求我输入私钥的passphrase:

 

输入私钥passphrase登录成功:

 

三个虚拟机中我都进行了相同的测试,均获得了成功。我又把slave1主机和slave2主机中的.ssh文件夹删除了,只保留了master主机上的.ssh文件和公钥私钥。

输入exit命令退出登录状态。

(5) 关闭命令终端,重新打开命令终端,我在master主机上输入:

boss@zs-master:~$ ssh boss@slave1

命令提示符还是boss@zs-master~$,而不是期望的boss@zs-slave1:~$,输入ls命令,显示的还是master主机/home/boss 文件夹下的文件:

 

(6)这时候还没有向slave1主机上拷贝master的公钥,在master上退出登录,关闭命令行终端,重新打开一个命令行终端(谨防有登录状态未曾退出),输入ssh-copy-id boss@slave1命令:

 

提示说:ALL keys were skipped because they already exist on the remote system.

但又提示说:if you think this is a mistake, you may want to use –f option.

好,既然你提示我这么做了,那么。。。

 

显示成功添加了一个key。

但是,输入ssh boss@slave1后:

命令提示符还是在master主机上:boss@zs-master:~$。

ls命令还是显示 this is master:

 

是不是需要重启ssh呢?------

 

无言独上西楼。。。。。。

 

(7)是不是因为没有在slave1主机上建立.ssh文件夹的缘故呢?那就建立吧:

 

 

然后在master主机上重新ssh-copy-id ,登录:

命令提示符还是在master上啊~~~啊~~~~~啊~~~~~~~~~~~~

 

(8)百思不得其解之下,想到好像还有用scp命令从master主机上拷贝文件到slave1的方法:

 

显示拷贝成功。

但在slave1主机上重新打开命令终端查看ssh文件夹下,却没有authorized_keys文件:

 

 

然后从master主机上登录:

命令提示符还是在master主机上啊,啊,啊~~~~~~

 

(9)要不再从slave1上scp试一试?-----

却显示没有 such file or directory.......................

这是怎么了?????????????????

谨向银河系发出求救信号~~~~~~~S~~~~~~~~~O~~~~~~~~~~~~~S~~~~~~~~~~~~~~~~2016年6月13日星期一~~~~~~~~~~~~~~~~~~~~~~~~~~~

HorseShoe2016的主页 HorseShoe2016 | 菜鸟二级 | 园豆:267
提问于:2016-06-13 15:01
< >
分享
最佳答案
0

问题解决了:

我当初建立的三个虚拟机,其中的slave1和slave2直接手动复制的master虚拟机。

后来我三个虚拟机都是独立安装的,就实验成功了。

为了确认是手动复制的问题,我又使用了VMware的克隆功能,克隆了master主机到clone,然后master和clone之间可以正常ssh通信。

总结:复制虚拟机不要手动复制,要使用VMware的克隆功能~~~~~~~~~

~~~~~~~~~~~~~~Done~~~~~~~~~~~~~~~~~~~~~~

HorseShoe2016 | 菜鸟二级 |园豆:267 | 2016-06-17 16:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册