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 ~]#
相关文章
|
20天前
|
数据库连接 Linux Shell
Linux下ODBC与 南大通用GBase 8s数据库的无缝连接配置指南
本文详细介绍在Linux系统下配置GBase 8s数据库ODBC的过程,涵盖环境变量设置、ODBC配置文件编辑及连接测试等步骤。首先配置数据库环境变量如GBASEDBTDIR、PATH等,接着修改odbcinst.ini和odbc.ini文件,指定驱动路径、数据库名称等信息,最后通过catalog.c工具或isql命令验证ODBC连接是否成功。
|
1月前
|
缓存 资源调度 安全
深入探索Linux操作系统的心脏——内核配置与优化####
本文作为一篇技术性深度解析文章,旨在引领读者踏上一场揭秘Linux内核配置与优化的奇妙之旅。不同于传统的摘要概述,本文将以实战为导向,直接跳入核心内容,探讨如何通过精细调整内核参数来提升系统性能、增强安全性及实现资源高效利用。从基础概念到高级技巧,逐步揭示那些隐藏在命令行背后的强大功能,为系统管理员和高级用户打开一扇通往极致性能与定制化体验的大门。 --- ###
64 9
|
1月前
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
43 5
|
3月前
|
网络协议 安全 Linux
如何配置Linux端的ftp?
如何配置Linux端的ftp?
157 64
|
1月前
|
监控 Ubuntu Linux
使用VSCode通过SSH远程登录阿里云Linux服务器异常崩溃
通过 VSCode 的 Remote - SSH 插件远程连接阿里云 Ubuntu 22 服务器时,会因高 CPU 使用率导致连接断开。经排查发现,VSCode 连接根目录 ".." 时会频繁调用"rg"(ripgrep)进行文件搜索,导致 CPU 负载过高。解决方法是将连接目录改为"root"(或其他具体的路径),避免不必要的文件检索,从而恢复正常连接。
|
3月前
|
安全 Linux 网络安全
Linux端的ssh如何升级?
Linux端的ssh如何升级?
324 59
|
2月前
|
Java Linux 网络安全
NIFI在Linux服务区上的部署配置过程是什么?
【10月更文挑战第21天】NIFI在Linux服务区上的部署配置过程是什么?
68 2
|
2月前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
471 3
|
2月前
|
监控 安全 网络协议
快速配置Linux云服务器
【10月更文挑战第3天】快速配置Linux云服务器
|
2月前
|
大数据 网络安全 数据安全/隐私保护
大数据-03-Hadoop集群 免密登录 超详细 3节点云 分发脚本 踩坑笔记 SSH免密 集群搭建(二)
大数据-03-Hadoop集群 免密登录 超详细 3节点云 分发脚本 踩坑笔记 SSH免密 集群搭建(二)
143 5