网络-Telnet协议与SSH协议(命令、免密登录)及其安全性

简介: 网络-Telnet协议与SSH协议(命令、免密登录)及其安全性

引言

在进行远程连接服务器时,我经常使用MobaXterm,在选择Session时,常会看到这个页面:

2020062310470442.png

                                             Session

之前不求甚解,只知道SSH可以进行远程连接,不清楚Telnet,其实学过FTP,看到SFTP,也没去看他们到底区别在哪里,Shell编程学了一点也不系统,感觉好多要学。今天先来学习Telnet和SSH协议。

Telnet

简介

Telnet(telecommunication network protocol,电信网络协议)是一个简单的远程终端协议,使用端口23。用户用Telnet就可在其所在地通过TCP连接注册(即登录)到远地的另一台主机上(使用主机名或IP地址)。Telnet能将用户的击键传到远地主机,同时也能将远地主机的输出通过TCP连接返回到用户屏幕。这种服务是透明的,因为用户感觉到好像键盘和显示器是直接连在远地主机上。因此,Telnet又称为终端仿真协议。

工作原理

Telnet也使用客户/服务器方式。在本地系统运行Telnet客户进程,而在远地主机则运行Telnet服务器进程。和FTP的情况相似,服务器中的主进程等待新的请求,并产生从属进程来处理每一个连接。

Telnet能够适应许多计算机和操作系统的差异。例如,对于文本中一行的结束,有的系统使用ASCII码的回车(CR),有的系统使用换行(LF),还有的系统使用两个字符,回车-换行(CR-LF)。又如,在中断一个程序时,许多系统使用Control-C(C),但也有系统使用ESC按键。为了适应这种差异,Telnet定义了数据和命令应怎样通过互联网。这些定义就是所谓的NVT(Network Virtual Terminal,网络虚拟终端)。

2020062310470442.png

NVT格式

客户软件把用户的击键和命令转换成NVT格式,并送交服务器。服务器软件把收到的数据和命令从NVT格式转换成远地系统所需的格式。向用户返回数据时,服务器把远地系统的格式转换为NVT格式,本地客户再从NVT格式转换到本地系统所需的格式。

NVT的格式定义很简单:所有的通信都使用8位(一个字节)。在运转时,NVT使用7位ASCII 码传送数据,而当高位置1时用作控制命令。ASCII码共有95个可打印字符(如字母、数字、标点符号)和33个控制字符。所有可打印字符在NVT中的意义和在ASCII码中一样。但NVT只使用了ASCII码的控制字符中的几个。此外,NVT还定义了两字符的CR-LF为标准的行结束控制符。当用户键入回车按键时,Telnet的客户就把它转换为CR-LF再进行传输,而Telnet服务器要把CR-LF转换为远地机器的行结束字符。Telnet的选项协商(Option Negotiation)机制使Telnet客户和Telnet服务器可商定使用更多的终端功能,协商的双方是平等的,也就是说任何一方都可以主动发送选项协商请求给对方。

2020062310470442.png

选项协商6种情况

  1. WILL:发送方本身将激活(enable)选项。
  2. DO:发送方想叫接收端激活选项。
  3. WONT:发送方本身想禁止选项。
  4. DON'T:发送方想让接收端去禁止选项。

注:由于Telnet规则规定,对于激活选项请求(如1和2),有权同意或者不同意。而对于使选项失效请求(如3和4),必须同意。这样,4种请求就会组合出6种情况,如上图所示。

安全性

不安全,因为使用明文传输。一旦被ARP中毒等中间人攻击,就会暴露用户名、密码等敏感信息。另外,账号密码简单时也可被暴力破解。

SSH

简介

SSH(Secure Shell),由 IETF 的网络小组(Network Working Group)所制定,端口22。SSH 为建立在应用层基础上的安全协议。SSH 是较可靠的,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台,几乎所有UNIX平台都可使用。

通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、PoP、甚至为PPP提供一个安全的"通道" 。

22端口由来小故事:SSH设计者Tatu Ylonen设计SSH是为了替代telnet(端口23)和ftp(端口21),端口22在当时是空闲的,正好就在telnet和ftp的端口之间,他感觉这个端口号天然就带有可信度光环。于是就选择了端口22作为SSH的端口。原文可查看ssh-端口。

另外,Tatu Ylonen于1995年写的SSH,W·Richard Stevens 于1994年写的《TCP/IP详解卷I》,所以里面只有Telnet,而没有SSH。可以阅读RFC4250进行更详细的了解。

OpenSSH是SSH协议的免费开源实现,OpenSSH提供了服务端的程序(openssh-server)和客户端工具(openssh-client),接下来以OpenSSH为例,介绍一下SSH命令及高级配置

安装与开启服务

# 安装服务端/客户端(Ubuntu)

$ sudo apt install openssh-server/openssh-client


# 安装服务端/客户端(Centos)

$ sudo yum install openssh-server/openssh-client


# 查看ssh服务是否开启

$ netstat -tlp | grep ssh


# 启动/停止/重启 ssh服务

$ sudo /etc/init.d/ssh start/stop/restart

2020062310470442.png

查看ssh服务是否开启

命令

2020062310470442.png

ssh命令

                                               SSH命令

image.png

2020062310470442.png

版本等信息

注意

  • user是远程服务器登录的用户名,默认为当前用户
  • hostname是远程服务器地址,可以是IP/域名/别名
  • exit/logout命令均可退出当前登录

接下来,展示一下连接ssh服务器

2020062310470442.png

Windows连接Ubuntu

可以看到,使用SHA256进行了校验,生成了一个指纹,我们关闭连接,重连一次。

2020062310470442.png

再次连接

再次连接,可以发现,已经没有了校验显示,输入密码后直接登录,稍微简便了一点。那么,校验记录存在哪呢?

cd ~/.shh
cat known_hosts

2020062310470442.png

Windows下校验记录

第一条是我的GitLab的,就划掉了,第二条是刚才连接的。

2020062310470442.png

Linux下校验记录

在~/.ssh/known_hosts文件中可以看到。接下来,我们就来详细看看一些配置。

高级配置

Linux下,ssh配置信息都保存在~/.ssh

image.png

后两个默认是不存在的,需要手动创建。下面Windows中也是仅有known_hosts文件的,另外两个是我给GitLab配置密钥文件时创建的。

Windows下

2020062310470442.png

Windows下内容

服务器别名

每次都写IP地址,但是IP地址比较难记,我们可以去一个别名。新建一个config文件,内容如下:

Host Ubuntu

 HostName 10.28.214.174

 User llvm

 Port 22

                  2020062310470442.png

config文件

其中,Port可以不写,默认就是22端口。

2020062310470442.png

别名登录

免密登录

通过以上,我们即可通过别名和密码登录了,但是每次都输入密码,比较麻烦,接下来我们看看免密登录。

客户端生成密钥对

ssh-keygen

2020062310470442.png

参数

我一般是不用参数的,它会给一些提示,我一般全部按Enter,选择默认,这次由于文件路径名字重复,才改了一个。上面的参数,博主只感觉-t参数比较有用,但是密码学学的也不好,默认的rsa加密方式也很好,一般也是默认。

2020062310470442.png

生成密钥文件

image.png

查看密钥文件

上传公钥到服务器

ssh-copy-id user@hostname

windows下没有这个命令,只能手动了。使用这个命令其实是将公钥追加到了服务器的authroized_keys文件中,我们把文件放到Ubuntu中,使用命令追加一下。

2020062310470442.png

公钥上传成功

接下来,我们就可以使用密钥文件登录了

ssh -i id_rsa_ubuntu Ubuntu

2020062310470442.png

密钥文件登录

还是有点麻烦,需要记着服务器需要使用哪个对应的私钥。我们再配置一下,添加私钥文件:

  IdentityFile C:\Users\DELL\.ssh\id_rsa_ubuntu

2020062310470442.png

配置密钥文件

好啦,至此,我们可以只是用一个别名就能登录了:

2020062310470442.png

ssh Ubuntu即可登录,无需密码

当然,我们只是为了学习一下ssh,平时博主也直接使用MobaXterm、Xshell等软件直接连接,有工具的话会节省很多时间。

对于GitHub、GitLab等也会使用密钥文件的方式,将公钥上传到服务器即可。

2020062310470442.png

GitLab上传页面

以GitLab为例,可以看到,要求上传ssh-rsa或ssh-ed25519的公钥。客户端生成密钥对时,可以使用-t参数,选择ed25519,也可使用默认的rsa方式。

安全性

  • 有效防止远程管理过程中的信息泄漏
  • 传输 数据加密,能够防止DNS和IP欺骗
  • 传输 数据压缩,加快传输速度

账号密码简单时也可被暴力破解。

关于这两个协议的安全实验,将在学习暴力破解的时候再展示。

参考

《计算机网络第7版 谢希仁》6.3

《TCP/IP详解I》第26章

RFC854

RFC4250

www.ssh.com











相关文章
|
2月前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
97 2
|
26天前
|
NoSQL 关系型数据库 MySQL
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
153 56
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
|
17天前
|
前端开发 网络协议 安全
【网络原理】——HTTP协议、fiddler抓包
HTTP超文本传输,HTML,fiddler抓包,URL,urlencode,HTTP首行方法,GET方法,POST方法
|
2月前
|
Linux iOS开发 网络架构
如何使用 Ping 命令监测网络丢包情况?
如何使用 Ping 命令监测网络丢包情况?
726 48
|
19天前
|
网络协议 安全 网络安全
探索网络模型与协议:从OSI到HTTPs的原理解析
OSI七层网络模型和TCP/IP四层模型是理解和设计计算机网络的框架。OSI模型包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,而TCP/IP模型则简化为链路层、网络层、传输层和 HTTPS协议基于HTTP并通过TLS/SSL加密数据,确保安全传输。其连接过程涉及TCP三次握手、SSL证书验证、对称密钥交换等步骤,以保障通信的安全性和完整性。数字信封技术使用非对称加密和数字证书确保数据的机密性和身份认证。 浏览器通过Https访问网站的过程包括输入网址、DNS解析、建立TCP连接、发送HTTPS请求、接收响应、验证证书和解析网页内容等步骤,确保用户与服务器之间的安全通信。
75 1
|
2月前
|
安全 搜索推荐 网络安全
HTTPS协议是**一种通过计算机网络进行安全通信的传输协议
HTTPS协议是**一种通过计算机网络进行安全通信的传输协议
78 11
|
2月前
|
监控 网络协议 网络性能优化
网络通信的核心选择:TCP与UDP协议深度解析
在网络通信领域,TCP(传输控制协议)和UDP(用户数据报协议)是两种基础且截然不同的传输层协议。它们各自的特点和适用场景对于网络工程师和开发者来说至关重要。本文将深入探讨TCP和UDP的核心区别,并分析它们在实际应用中的选择依据。
72 3
|
2月前
|
网络协议 网络安全 网络虚拟化
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
131 3
|
2月前
|
网络虚拟化
生成树协议(STP)及其演进版本RSTP和MSTP,旨在解决网络中的环路问题,提高网络的可靠性和稳定性
生成树协议(STP)及其演进版本RSTP和MSTP,旨在解决网络中的环路问题,提高网络的可靠性和稳定性。本文介绍了这三种协议的原理、特点及区别,并提供了思科和华为设备的命令示例,帮助读者更好地理解和应用这些协议。
88 4
|
2月前
|
网络协议 Linux
使用nmcli命令设置IP地址并排查网络故障
nmcli 是一个功能强大的网络管理工具,通过它可以轻松配置IP地址、网关和DNS,同时也能快速排查网络故障。通过正确使用nmcli命令,可以确保网络配置的准确性和稳定性,提高系统管理的效率。希望本文提供的详细步骤和示例能够帮助您更好地掌握nmcli的使用方法,并有效解决实际工作中的网络问题。
155 2