Linux系列:SSH免密登陆详细配置!

举报
数据分析与统计学之美 发表于 2021/09/27 20:55:44 2021/09/27
【摘要】 linux系列第八课

1、什么是SSH?

SSH为Secure Shell(安全外壳协议)的缩写,简单说,SSH只是一种网络协议,用于计算机之间的加密登录。

很多ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人很容易就可以截获这些口令和数据。而SSH就是专为远程登录会话和其他网络服务,提供安全性协议。

2、SSH由“客户端”和“服务端”的软件组成

服务端是一个守护进程(sshd),它在后台运行并响应,来自客户端的连接请求。

客户端包含ssh程序以及像scp(远程拷贝)、slogin(远程登陆)、sftp(安全文件传输)等其他的应用程序。

注意:谁被连接,就把谁看成服务端。

例如:我装了两台虚拟机bigdata111和bigdata112,假如bigdata111想要连接bigdata112,此时就需要借助bigdata112中的sshd进程,此时可以把bigdata111看成客户端,把bigdata112看成服务端。

客户端(bigdata111)要连接服务端(bigdata112),那么服务端(bigdata112)这个sshd守护进程,会响应来自客户端(bigdata111)的连接请求。

"可以使用netstat -nltp命令,查看sshd端口号和进程号。"
netstat -nltp

"ps命令可以查看sshd的进程号。"
ps aux | grep ssh

3、SSH认证机制

从客户端来看,SSH提供两种级别的安全验证。

1)基于口令的安全验证

只要你知道对方帐号和口令(密码),就可以登录到远程主机。但是搭建集群的时候,需要进行多台虚拟机之间的传输,假如每次都要输入口令(密码),显得很麻烦。

2)基于秘钥的安全验证

在这里插入图片描述
上图黑色部分1,2,3原理说明:

  • 客户端先生成一对密钥(公钥、私钥),私钥自己保留着,公钥远程拷贝给目标主机(你要远程登陆谁,谁就是目标主机),并将该公钥放到目标主机的授权池。
  • 为什么是授权池?
  • 你可以类比现实生活中的一个大池子,既然是池子,肯定可以容纳很多东西,它不仅可以接纳bigdata111发送过来的公钥,它还可以接纳来自其它机器发送过来的公钥,谁要是想登陆到我,直接都把公钥塞到我这个授权池就好啦。

上图蓝色部分Ⅰ、Ⅱ、Ⅲ、Ⅳ原理说明:

  • 完成上述发送公钥操作后,Ⅰ当客户端bigdata111请求登陆服务端bigdata112的时候,Ⅱ服务端检查是否存在这个公钥,如果公钥存在,Ⅲ服务端将该公钥加密一个随机字符串返回给客户端,Ⅳ客户端收到加密公钥后,便用自己的私钥解密返回给服务端。如果能够正确解密(解密后的字符串和加密后的字符串一致),就允许这个登陆请求。

免密登录的操作原理如下:

  • 知道上述原理后,免密登陆就显得很简单。在客户端生成一对密钥,然后把公钥发送到服务端的授权池,就OK了。

4、演示“远程拷贝”

在这里插入图片描述
首先,把bigdata112中的东西删掉,方便演示。(假如你不确定这样做是否安全,那么你可以先【拍一个快照】,再进行错误。一旦发生错误,就可以恢复原来的样子)

[root@bigdata112 ~]# rm -rf *

删除后可以看到,bigdata112中/root家目录下,没什么其他东西了 。
在这里插入图片描述
接着,在bigdata111中创建一个a.txt文件,如下所示:
在这里插入图片描述

需求:把bigdata111中的a.txt文件,发送到bigdata112这个机器中!!!

远程拷贝命令如下:

[root@bigdata111 ~]# scp -r a.txt root@bigdata112:~/

特别注意1:远程拷贝使用的是scp命令;a.txt是我们要拷贝的文件;root@bigdata112表示我们要把文件拷贝给bigdata112这台机器的root用户;:后面写的是路径,这里代表我们要拷贝到bigdata112的root用户的家目录下。

特别注意2: 因为,我们在bigdata111的vim /etc/hosts目录下,配置了bigdata112的主机映射。因此,我可以将192.168.2.112写成bigdata112,假如你没有配置主机映射,那么需要写成“scp -r a.txt root@192.168.2.112:~/”。

第一次进行远程拷贝(没有经过任何配置),会出现以下询问:

[root@bigdata111 ~]# scp -r a.txt root@bigdata112:~/
Are you sure you want to continue connecting (yes/no)?    yes
root@bigdata112's password:   ******

这里我们写yes,然后输入自己设置的bigdata112的登陆密码******,即可。

最后,我们去到bigdata112下面查看,是否存在“a.txt”的文件。
在这里插入图片描述
注意这样一个细节问题,当我们远程发送一次文件后,若再次进行发送,发现就不会在询问你“Are you sure you want to continue connecting (yes/no)?”,而是直接让你输入密码,这是为什么呢?

[root@bigdata111 ~]# scp -r a.txt root@bigdata112:~/
Are you sure you want to continue connecting (yes/no)?    yes
root@bigdata112's password:   ******
a.txt 
 # 再次发送
[root@bigdata111 ~]# scp -r a.txt root@bigdata112:~/  
root@bigdata111's password: ******
a.txt 

原因:这里有一个隐藏的文件“.ssh”,我们先进入到该目录下 :

[root@bigdata111 ~]# cd .ssh/
[root@bigdata111 .ssh]# ll
total 4
-rw-r--r--. 1 root root 798 Sep 30 00:19 known_hosts

从上面可以看出,这里有一个文件known_hosts。当我第一次远程发送文件的时候,会在客户端自动创建一个这样的known_hosts文件,服务端(bigdata112)的IP相当于在客户端(bigdata111)注册了,当再次远程发送的时候,就不会问你yes还是no了。

当我们删除该文件,你再进行远程发送,又会询问你yes还是no了。

5、配置免密登录:和免密登陆相关的文件夹/root/.ssh

在这里插入图片描述
免密登陆配置的步骤如下:

1)创建密钥对:ssh-keygen

[root@bigdata111 .ssh]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
e1:ba:be:ee:23:cc:91:9f:9b:71:36:b6:84:91:b6:dc root@bigdata112
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|        .        |
|       o .       |
|     .+ S        |
|    oo *         |
|   o o*.E        |
|    + +O o       |
|     =O+.        |
+-----------------+

注意:输入ssh-keygen后,连续点击Enter三次(什么也不用输入),即可。当出现上述 图,代表创建密钥对成功。同时,我们可以查看该目录下,也多了几个文件id_rsa、id_rsa.pub。

[root@bigdata111 .ssh]# ll
total 12
-rw-------. 1 root root 1675 Sep 30 00:39 id_rsa
-rw-r--r--. 1 root root  397 Sep 30 00:39 id_rsa.pub
-rw-r--r--. 1 root root  798 Sep 30 00:19 known_hosts

发送公钥到另一台机器的授权池

我们先去bigdata112的“.ssh”目录下查看其中的文件。

"注意ll中的参数-a可以将文件夹下,所有以.开头的文件显示出来"
[root@bigdata112 ~]# ll -a
total 68
dr-xr-x---.  4 root root  4096 Sep 30 00:22 .
dr-xr-xr-x. 22 root root  4096 Sep 29 18:45 ..
-rw-r--r--.  1 root root    81 Sep 30 00:48 a.txt
-rw-------.  1 root root 10420 Sep 29 23:30 .bash_history
-rw-r--r--.  1 root root    18 May 20  2009 .bash_logout
-rw-r--r--.  1 root root   176 May 20  2009 .bash_profile
-rw-r--r--.  1 root root   176 Sep 23  2004 .bashrc
-rw-r--r--.  1 root root   100 Sep 23  2004 .cshrc
-rw-------.  1 root root   125 Sep 30 00:03 .mysql_history
-rw-------.  1 root root   312 Sep 21 05:14 .mysql_secret
drwxr-xr-x.  2 root root  4096 Sep 20 19:33 .oracle_jre_usage
drwx------.  2 root root  4096 Sep 30 00:39 .ssh
-rw-r--r--.  1 root root   129 Dec  4  2004 .tcshrc
-rw-------.  1 root root  5900 Sep 29 22:45 .viminfo
[root@bigdata112 ~]# cd .ssh
[root@bigdata112 .ssh]# ll
total 0

从上面可以看出,bigdata112的“.ssh”目录下目前是空的。

当我们发送公钥到另一台机器的授权池后:

[root@bigdata111 ~]# ssh-copy-id 192.168.2.112
root@192.168.2.112's password: ******
Now try logging into the machine, with "ssh '192.168.2.112'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

第一次发送要输入192.168.2.112的登陆密码,当出现上述结果,证明发送成功。

再次查看bigdata112的“.ssh”目录下查看其中的文件。

[root@bigdata112 .ssh]# ll
total 4
-rw-------. 1 root root  397 Sep 30 00:52 authorized_keys

可以看出,这里多了一个authorized_keys的文件。

6、检验

上面我们已经配置好了SSH免密登陆,这里,我们再次将a.txt文件从bigdata111发送到bigdata112,看看是否还要输入密码 。

首先,将路径切换到“.ssh”的上一级目录/root目录下:

[root@bigdata111 ~]# cd ~

接着,使用如下命令远程发送:

[root@bigdata111 ~]# scp -r a.txt root@bigdata112:~/
The authenticity of host 'bigdata112 (192.168.2.112)' can't be established.
RSA key fingerprint is 78:8c:77:14:bc:76:1a:83:dc:84:9f:f5:52:3b:b1:4c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'bigdata112' (RSA) to the list of known hosts.
a.txt                                                                         100%    3     0.0KB/s   00:00    
[root@bigdata111 ~]# scp -r a.txt root@bigdata112:~/
a.txt 

从上面可以看出,发送的第一次,只是询问了一句yes还是no,当我们下面再次发送,一次密码也不用输入了。

在最后,我们还可以在bigdata111中,试着远程登陆一下bigdata112。

[root@bigdata111 ~]# ssh bigdata112
Last login: Sun Sep 29 22:47:11 2019 from bigdata111
[root@bigdata112 ~]# exit
logout
Connection to bigdata112 closed.
[root@bigdata111 ~]#

可以看到,我们也没有输入密码。切换到bigdata112后,可以使用exit退出登录。

至此,大功告成,是不是很Happy!!!

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。