目录
[SSH(Secure Shell)协议](#SSH(Secure Shell)协议)
终端
终端:接收用户的指令
解释器:shell,终端上执行命令和程序的程序。它接收用户输入的命令,并将其发送给操作系统进行处理。
TTY终端:电传打字机
虚拟终端:借助ssh协议远程连接某一个主机,实际上是获取了一个该主机的shell
终端是用户与计算机交互的界面,而Shell是在终端上执行命令和程序的解释器
ssh:22端口
telnet:23端口
OpenSSH服务器
SSH(Secure Shell)协议
- 安全外壳协议
- 是一种安全通道协议
- 对通信数据进行了加密处理,用于远程管理
OpenSSH
- 服务名称:sshd
- 服务端主程序:/usr/sbin/sshd
- 服务端配置文件:/etc/ssh/sshd_config
服务监听选项
- 端口号、协议版本、监听IP地址
- 一切网络程序都有对应的端口号
- 禁用反向解析
SSH配置
修改端口号
监听sshd进程,当前端口号为22

cd到ssh服务的相关目录

查看文件

进入sshd_config配置文件修改,在第17行设置端口为1234
由于默认监听的就是本机所有地址,所以不修改

关闭内核安全机制,重启服务,更新配置参数
ssh是一个安全机制,是受到内核保护的,一旦该服务的核心参数(端口号)被修改,内核安全机制就会生效,不允许重启sshd服务

再监听sshd进程,端口号当前为1234

可以看到sshd的一条连接进程的端口号还是22,
因为对于已经建立的连接,修改端口号不会对这种连接生效

如果当前把Xshell与虚拟机断开连接,在102主机上再重新连接
因为端口号被修改,所以要使用新的端口1234与虚拟机建立连接
会显示没有到达该主机的路由,其实跟路由没关系,是101主机的防火墙拦截了流量
那为什么之前使用22端口的时候防火墙不拦截呢?因为在默认情况下,防火墙不拦截22端口的流量,可以添加防火墙的流量策略,或者直接关闭防火墙

关闭101主机的防火墙

如果在别的主机连接指定主机时,当前使用的主机是哪个用户就用哪个用户登录指定主机
所以这里就是用102主机的root用户登录连接101主机
重新回到102的Xshell连接,输入密码,成功连接

当端口号改回22后,102主机再去通过指定1234端口连接101主机会显示

当使用102主机登录101主机后,在当前root家目录下使用ls -a命令会有一个.ssh隐藏目录
该目录有一个known_hosts(已知主机)文件,当前主机连接过哪些主机的信息 记录在该文件中

回看之前的连接信息
fingerprint(指纹):一种密钥,把目标主机的"指纹"信息保存到本机,有SHA的算法和MD5的算法提供了两种不同的密钥

用户登录控制

从第37行开始,是sshd用于配置用户登录的参数,当我们把登录次数的注释去掉设为6次(不去掉注释也默认6次)

修改完配置文件需要重启sshd服务让参数生效
去102主机尝试登录101主机,会发现只能登录3次,可是明明设置的参数是6次为什么只能输入3次密码?
因为PAM认证的认证机制是3次,在ssh中,登录次数 3,就不生效了

如果想要 指定登录次数 就要在连接时加一段选项

指定用户登录
1.
创建一个用户,添加密码


在102主机上 指定用户连接101的主机

2.
在sshd的配置文件中添加,允许指定用户登录

也可以添加IP地址,指定该用户只能在指定IP的主机上登录系统

此时在102主机使用zhangsan的用户登录就可以,但是使用root登录就不行
提高了系统的安全性

严格模式

严格模式是SSH服务器的一种安全设置,通过检查用户的家目录和相关文件的权限设置,确保其符合安全要求。
主要目的是防止潜在的安全风险,如恶意用户修改 authorized_keys 文件获取非法访问权限。启用严格模式可以提高系统的安全性,因为它要求家目录权限不能过于宽松
同时要求 .ssh 目录及相关文件的权限必须严格限制,只允许用户自己访问。
最大会话数量
两台主机建立连接,就是一个会话,允许多少个客户端同时用ssh的方式连接本服务器

公钥验证
公钥验证是SSH服务器用来验证用户身份的一种方法,通过比对用户提供的公钥和服务器上已注册的公钥信息来确认用户的身份。
配置文件中的 PubkeyAuthentication 选项用于启用或禁用公钥验证。
而 AuthorizedKeysFile 选项则用于指定存储用户公钥的文件路径。

往下翻可以看到密码验证,已经开启,我们现在登录系统所用的方式就是密码验证

使用公钥认证让客户端登录系统
在102客户端主机上使用ssh-keygen命令生成密钥文件,-t 选项指定密钥类型,这里指定为RSA算法生成密钥
密钥文件存放位置:用哪个用户登录就放到哪个用户的家目录,这里用的是root登录,使用默认路径,直接回车
系统会询问你是否要为私钥文件设置密码。如果你希望私钥文件受到保护,只能在输入密码后才能使用,你可以输入密码并按下回车键。如果你不想设置密码,可以留空密码字段直接按下回车键。如果设置了密码,在登录服务器主机时还会要求你确认密码。

生成过密钥文件后就可以去对应目录下查看密钥文件
- 私钥文件(id_rsa):私钥文件应该被妥善保管,只有持有者可以访问。私钥用于解密从公钥加密的数据,并且也用于对数据进行数字签名。
- 公钥文件(id_rsa.pub):公钥文件可以被分享给其他人或远程服务器。公钥用于加密数据或验证由私钥签名的数据。
- 一个私钥文件对应一个公钥文件,一起构成了密钥对
- 如果要以密钥的形式登录用户,就需要密钥对

然后通过ssh-copy-id命令将公钥文件拷贝生成到服务器的 authorized_keys 文件中
authorized_keys 文件是SSH服务器端用于存储被授权的公钥的文件。当一个用户尝试通过SSH连接到服务器时
服务器会检查该用户的authorized_keys文件,以确定是否允许该用户进行身份验证。
如果连接请求中包含的公钥在authorized_keys中找到匹配项,那么连接就会被允许。

去101服务器主机上的对应位置查看该文件有没有被生成出来

此时回到102客户端主机使用ssh 192.168.10.101 登录101主机,如果刚才设置了私钥文件的密码就需要输入刚才设置的密码,如果没设置,就实现了免密登录
域名解析
- yes:表示启用反向DNS解析。当客户端连接到SSH服务器时,服务器会解析客户端的IP地址并获取对应的域名信息。但会增加连接的时间。
- no:表示禁用反向DNS解析。当设置为no时,SSH服务器不会进行DNS解析,会减少连接时的时间。
关闭域名解析,在登录系统时就会直接使用提供的IP来连接服务器,少了解析功能连接系统的速度就会变快
因为我们实验用的是私有地址192.168.10.101不用解析,所以设为no或者注释掉

跨主机下载、上传文件
下载
比如你发布到公网上的一个服务器,你需要定期备份服务器上的某个很重要的文件
102主机把101主机上的某个文件下载到本地

使用scp命令下载101主机的文件

指定端口下载

上传
使用scp 要传输文件的路径 目标主机:路径

101主机接收完毕

指定端口上传

sftp功能
SFTP(Secure File Transfer Protocol)是一种基于SSH协议的安全文件传输协议,它提供了对远程文件系统进行操作的能力,并且在数据传输过程中提供了加密和认证功能
- 用户可以通过SFTP协议在客户端和服务器之间传输文件,包括上传、下载、删除、重命名等操作,使得远程文件管理变得非常方便。
- SFTP支持多种身份验证方式,包括密码认证和公钥认证,用户可以根据自己的需求选择适合的认证方式。
下载
使用get命令

上传
使用put命令

101主机如下

端口号被修改后跨主机上传下载文件
下载
将sshd的端口号改为1234,重启服务


在102主机使用scp命令加入指定端口的选项

上传

sftp指定端口操作
客户端修改端口
编辑102主机作为客户端的配置文件

将连接其他服务器的本机端口改为1234

作为客户端去登录其他服务器,不需要监听,用不到sshd服务,所以不需要重启sshd服务

lrzsz工具时间快捷上传下载
该工具只针对于Xshell
下载
安装该软件包

使用 sz 命令就可以从宿主机上传文件到该Linux系统

上传
使用 rz 文件路径 上传到宿主机

wrapper访问控制
先来到101客户端主机配置
在系统中提供了两个文件来配置允许访问和拒绝访问

进入允许访问的配置文件,配置允许访问本机指定服务的IP或网段

再配置拒绝的配置文件,拒绝所有主机

此时来到102主机登录101服务端的系统,成功进入

再开启一个103客户端主机访问101服务端主机就会显示

Xintd
Xintd:超级进程,它不是某个特定的服务,而是一组服务的集合
Xintd所能管理的服务都可以用wrapper访问控制进行管理
系统默认使用xinetd的服务分类
下方包含服务才可以用wrapper进行管理
|--------------|--------------------------------------------|
| 服务 | 说明 |
| 标准Internet服务 | telnet、ftp |
| 信息服务 | finger、netstat、systat |
| 邮件服务 | imap、imaps、pop2、pop3、pops |
| RPC服务 | rquotad、rstatd、rusersd、sprayd、walld |
| BSD服务 | comsat、exec、login、ntalk、shell、talk |
| 内部服务 | chargen、daytime、echo、servers、services、time |
| 安全服务 | irc |
| 其他服务 | name、tftp、uucp |