Linux中SSH免密登陆配置

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: Linux中SSH免密登陆配置

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)基于秘钥的安全验证

image.png

上图黑色部分1,2,3原理说明:

 客户端先生成一对密钥(公钥、私钥),私钥自己保留着,公钥远程拷贝给目标主机(你要远程登陆谁,谁就是目标主机),并将该公钥放到目标主机的授权池。

 为什么是授权池?

 你可以类比现实生活中的一个大池子,既然是池子,肯定可以容纳很多东西,它不仅可以接纳bigdata111发送过来的公钥,它还可以接纳来自其它机器发送过来的公钥,谁要是想登陆到我,直接都把公钥塞到我这个授权池就好啦。

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

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

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

 知道上述原理后,免密登陆就显得很简单。

 在客户端生成一对密钥,然后把公钥发送到服务端的授权池,就OK了。

 


4、演示“远程拷贝”

image.png

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


[root@bigdata112 ~]# rm -rf *


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

image.png

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

image.png

需求:把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


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

 我们先去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 ~]#
相关文章
|
2天前
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
9 5
|
4天前
|
监控 Ubuntu Linux
使用VSCode通过SSH远程登录阿里云Linux服务器异常崩溃
通过 VSCode 的 Remote - SSH 插件远程连接阿里云 Ubuntu 22 服务器时,会因高 CPU 使用率导致连接断开。经排查发现,VSCode 连接根目录 ".." 时会频繁调用"rg"(ripgrep)进行文件搜索,导致 CPU 负载过高。解决方法是将连接目录改为"root"(或其他具体的路径),避免不必要的文件检索,从而恢复正常连接。
|
16天前
|
Java Linux 网络安全
NIFI在Linux服务区上的部署配置过程是什么?
【10月更文挑战第21天】NIFI在Linux服务区上的部署配置过程是什么?
35 2
|
29天前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
237 3
|
1月前
|
监控 安全 网络协议
快速配置Linux云服务器
【10月更文挑战第3天】快速配置Linux云服务器
|
1月前
|
大数据 网络安全 数据安全/隐私保护
大数据-03-Hadoop集群 免密登录 超详细 3节点云 分发脚本 踩坑笔记 SSH免密 集群搭建(二)
大数据-03-Hadoop集群 免密登录 超详细 3节点云 分发脚本 踩坑笔记 SSH免密 集群搭建(二)
105 5
|
1月前
|
XML 大数据 网络安全
大数据-03-Hadoop集群 免密登录 超详细 3节点云 分发脚本 踩坑笔记 SSH免密 集群搭建(一)
大数据-03-Hadoop集群 免密登录 超详细 3节点云 分发脚本 踩坑笔记 SSH免密 集群搭建(一)
63 4
|
1月前
|
应用服务中间件 Linux Shell
Linux 配置 Nginx 服务的详细步骤,绝对干货
Linux 配置 Nginx 服务的详细步骤,绝对干货
67 0
|
1月前
|
Unix Linux Go
Linux 使用Yum安装Go和配置环境
Linux 使用Yum安装Go和配置环境
|
Linux 网络安全 数据安全/隐私保护
Linux免密登陆(CentOS7.2为例)
Linux免密登陆(CentOS7.2为例)
474 0
Linux免密登陆(CentOS7.2为例)
下一篇
无影云桌面