前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux中SSH免密登陆配置

Linux中SSH免密登陆配置

作者头像
数据分析与统计学之美
发布2021-11-25 10:18:17
3.9K0
发布2021-11-25 10:18:17
举报
文章被收录于专栏:Python+数据分析+可视化
目录

1、什么是SSH? 2、SSH由“客户端”和“服务端”的软件组成 3、SSH认证机制(详细图解) 4、演示“远程拷贝” 5、配置免密登录:和免密登陆相关的文件夹/root/.ssh 6、检验是否配置成功

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)的连接请求。

代码语言:javascript
复制
"可以使用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中的东西删掉,方便演示。(假如你不确定这样做是否安全,那么你可以先【拍一个快照】,再进行错误。一旦发生错误,就可以恢复原来的样子)

代码语言:javascript
复制
[root@bigdata112 ~]# rm -rf *

删除后可以看到,bigdata112中/root家目录下,没什么其他东西了 。

  接着,在bigdata111中创建一个a.txt文件,如下所示:

需求:把bigdata111中的a.txt文件,发送到bigdata112这个机器中!!! 远程拷贝命令如下:

代码语言:javascript
复制
[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:~/”。

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

代码语言:javascript
复制
[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)?”,而是直接让你输入密码,这是为什么呢?

代码语言:javascript
复制
[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”,我们先进入到该目录下 :

代码语言:javascript
复制
[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
代码语言:javascript
复制
[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。

代码语言:javascript
复制
[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
2)发送公钥到另一台机器的授权池

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

代码语言:javascript
复制
"注意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”目录下目前是空的。 当我们发送公钥到另一台机器的授权池后:

代码语言:javascript
复制
[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”目录下查看其中的文件。

代码语言:javascript
复制
[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目录下:

代码语言:javascript
复制
[root@bigdata111 ~]# cd ~

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

代码语言:javascript
复制
[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。

代码语言:javascript
复制
[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!!!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/03/07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • 1、什么是SSH?
  • 2、SSH由“客户端”和“服务端”的软件组成的
  • 3、SSH认证机制
    • 1)基于口令的安全验证
      • 2)基于秘钥的安全验证
      • 4、演示“远程拷贝”
      • 5、配置免密登录:和免密登陆相关的文件夹/root/.ssh
        • 1)创建密钥对:ssh-keygen
          • 2)发送公钥到另一台机器的授权池
      • 6、检验是否配置成功
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档