zl程序教程

您现在的位置是:首页 >  系统

当前栏目

Linux进阶教程丨第8章:配置和保护SSH

2023-09-27 14:21:06 时间

本文是 i 春秋作家「xiehudie」表哥分享的技术文章,旨在为大家提供更多的学习方法与技能技巧,文章仅供学习参考。本套Linux进阶教程共分为14章,欢迎大家前来系统学习。

前期回顾>>

第1章:访问命令行

第2章:从命令行管理文件

第3章:编辑、查看和编辑文本文件

第4章:管理用户和组

第5章:控制对文件的访问

第6章:监控与管理Linux进程

第7章:控制服务和守护进程

Linux进阶教程丨第2章:从命令行管理文件 

第8章:配置和保护SSH

一、使用SSH访问远程命令行

首先,我们需要了解一下什么是SSH,以及SSH有什么用处。

简单一点来说,SSH就是一种网络中的协议,用来加密计算机之间的登陆。在Linux中,SSH协议能使系统能够通过不安全的网络以加密和安全的方式进行通信。当然我们可以使用ssh命令来创建与远程系统的安全连接、以特定用户身份进行身份验证,并以该用户身份在远程系统上获取交互式shell会话。我们也可以使用ssh命令在远程系统上运行单个命令,而不运行交互式shell。下面将通过一些例子来说明SSH的安全性和重要性。

使用ssh登录远程系统需要我们输入该用户的密码来进行身份验证

Linux进阶教程丨第8章:配置和保护SSH

 使用exit退出则不需要验证

Linux进阶教程丨第8章:配置和保护SSH

 

在user01用户上使用用户名为user02的账户登录服务器则需要输入该用户的密码进行验证。

Linux进阶教程丨第8章:配置和保护SSH

 使用w命令可以显示当前登录到计算机的用户列表,可以显示出来哪些用户从哪些远程位置进行了登录以及执行了任何操作。

Linux进阶教程丨第8章:配置和保护SSH

 如上面显示,use0r2用户在今天的16:13从ip为172.25.250.10的主机登录了伪终端0上的系统,并且在shell提示符下闲置了7分钟半。而user01用户登录了伪终端1上的系统,并且自执行了w命令后三秒一直处于闲置状态。

二、SSH主机密匙

SSH通过公钥加密技术来保持通信安全。当某一SSH客户端连接到SSH服务器时,在该客户端登录之前,服务器会向其发送公钥副本。这可以用于设置通信渠道的安全加密,并可验证客户端的服务器。当用户使用ssh命令连接到SSH服务器时,该命令会检查它在本地已知主机文件中是否有该服务器的公钥副本,一般情况下,用户的主目录里面会有一个包含公钥的~/.ssh/known_hosts的文件。

如果客户端有公钥的副本,ssh就会将该服务器已知主机的公钥与它所收到的公钥进行比较。如果公钥不匹配,客户端会假定服务器的网络流量已遭劫持或服务器已被入侵,并且请求用户确认要继续连接。

如果客户端的已知主机文件中没有公钥的副本,ssh命令会询问我们是否仍要登录。如果仍进行登录,公钥的副本就会保存到我们的~/.ssh/known_hosts文件中,以便将来能自动确认服务器的身份。(如下图所示)

Linux进阶教程丨第8章:配置和保护SSH

 

如果由于硬盘驱动器故障而导致公钥丢失或由于某些正当理由而导致公钥被换,并由此更改了服务器的公钥,我们需要编辑已知的主机文件以确保旧公钥条目被替换成新公钥条目,从而确保登录时不会产生错误。

公钥存储在/etc/ssh/ssh_known_hosts及SSH客户端上每个用户的~/.ssh/known_hosts文件中。每个公钥各占一行,第一个字段是共享该公钥的主机名和IP地址的列表,第二个字段是公钥的加密算法,最后一个字段是公钥本身。

Linux进阶教程丨第8章:配置和保护SSH

 

我们所连接的每个远程SSH服务器都将其公钥存储在/etc/ssh目录下拓展名为.pub的文件中。

Linux进阶教程丨第8章:配置和保护SSH

 

三、配置基于SSH密钥的身份验证

我们可以配置SSH服务器,以便能通过基于密钥的身份验证在不使用密码的情况下进行身份验证,这种身份验证基于私钥-公钥方案。

为此,我们需要生成加密密钥文件的一个匹配对,一个是私钥,另一个是匹配的公钥。私钥文件用作身份验证凭据,就像密码一样,必须妥善保管。公钥复制到用户希望连接到的系统,用于验证私钥,公钥并不需要保密。

首先,我们将公钥的副本放在服务器的账户上,在尝试登录时,SSH服务器可使用公钥发出一个只能用私钥正确解答的难题,然后我们的ssh客户可利用私钥的唯一副本自动验证我们的服务器登录,最后,我们就不必每次访问系统时以交互的方式输入密码,而安全性仍能得到保证。

要创建用于身份验证的私钥和匹配的公钥,我们可以用ssh-keygen命令。默认情况下,私钥和公钥分别保存在~/.ssh/id_rsa和~/.ssh/id_rsa.oub文件中。

Linux进阶教程丨第8章:配置和保护SSH

 

如果我们未在ssh-keygen提示时指定密语,则生产的私钥不受保护,在这种情况下,任何拥有我们公钥文件的人都可以使用它进行身份验证。如果我们设置了密码,则在使用私钥进行身份验证时需要输入此密语。

我们在可以使用基于密钥的身份验证之前,需要将公钥复制到目标系统上,ssh-copy-id命令可将SSH密钥对的公钥复制到目标系统,如果在运行ssh-copy-id时省略了公钥文件的路径,它会使用默认的
/home/user/.ssh/id_rsa.oub文件。

Linux进阶教程丨第8章:配置和保护SSH

 

将公钥成功传输到远程系统后,我们可以使用对应的私钥对远程系统进行身份验证,同时通过SSH登录远程系统。如果在运行ssh命令省略了私钥文件的路径,它会使用默认的/home/user/.ssh/id_rsa文件。

Linux进阶教程丨第8章:配置和保护SSH