0
点赞
收藏
分享

微信扫一扫

为什么SSH能向多个用户提供连接而TCP、UDP连接只能对一个用户提供?

云卷云舒xj 2022-02-26 阅读 72
sshtcp/ipudp

为什么SSH能向多个用户提供连接,而TCP、UDP连接只能对一个用户提供?

SSH如何向多个用户提供服务?

0x00 SSH协议的组成

ssh协议作为提供服务的协议,与平常我们对端口的监听与连接存在一定的不同,ssh协议由以下三部分组成。

0x01 结论

由此可见每一个被连接的用户都是通过22端口进行转发的,而不是直接与22端口进行通信。那么与用户通信的是哪个进程?

而SSH本身就是一种特殊的协议,通过隧道转发和TCP连接转发来处理多个请求,当请求到来的时候SSH守护进程会产生一个子进程,该子进程进行这次的连接处理,因此看似ssh监听的22端口能够同时为多个用户同时提供服务,但其实只是通过总服务进程管理转发多个子进程。

0x02 实验验证

这里搭建一个小的实验环境,用来验证每一次用户登录都会重新创建一个bash进程。
实验环境为:

终端系统IP备注
虚拟机1kali_2018192.168.40.130提供SSH服务
虚拟机2Ubuntu192.168.40.128连接SSH服务
物理机Win_10192.168.40.1连接SSH服务

首先在kali中开启ssh服务:

/etc/init.d/sshd start

使用命令ps -e | grep ssh查看是否成功开启。
在这里插入图片描述
并将/etc/ssh/sshd_config文件中的PermitRootLogin值改为yes后去掉注释,允许root用户通过远程访问ssh。
首先在kali中查看目前bash的进程情况,可以看到只有当前打开的bashgrep两个进程,终端只有pts/1.

ps -aux | grep bash

在这里插入图片描述

分别用物理机和Ubuntu连接kali 的ssh服务。

ssh root@192.168.40.130

连接后使用netstat -an | grep :22分别查看对应的端口与连接。
可以看到此时除了一开始的63806476又多出了两个bash,分别为64946510,两个虚拟终端分别为pts/0pts/2,这里grep是新开的,因此与上一次的PID也不同。
在这里插入图片描述
使用who命令查看当前连接的SSH用户,pts/0pts/2就是上面我们远程开启的两个bash进程,由此可见每一个ssh用户都占用了一个bash进程。
在这里插入图片描述

普通连接能否创建多个?

0x00 验证两个TCP连接

上面提到ssh是使用连接转发技术每一次都创建新的连接,而TCP是实打实的互相连接,且通过三次握手之后建立的连接两个端口之间有且仅有一条连接在活动。
我们使用上面的环境进行测试。
在kali中监听一个tcp连接nc -lp 8888
在这里插入图片描述
首先在Ubuntu中连接他,发送一条hell消息,此时连接建立。
在这里插入图片描述
在这里插入图片描述在win_10中继续连接这个端口。
在这里插入图片描述
所以同一个监听的端口无法连接两个TCP连接。

0x01 验证两个udp连接

使用命令nc -lup 8888监听kali上的udp端口,分别用两台电脑使用udp协议前后连接8888端口,可以发现只会接受先连接的那个终端,另一个终端发送消息也不会被接受。

nc -u 192.168.40.130

在这里插入图片描述

0x02 验证一个TCP连接一个UDP连接

在kali中分别监听两个协议类型的8888端口。

nc -lp 8888
nc -lup 8888

分别使用两台终端连接这两个端口。
在这里插入图片描述
都连接成功.

0x03 结论

举报

相关推荐

0 条评论