一.SSH协议
1.什么是SSH?
SSH全称 安全外壳协议(Secure Shell),,是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。 如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。

SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接
主要用于远程登录,通过本机的ssh客户端,登录到远程的ssh服务器,从而实现在本地远程操作和控制服务器。
几乎所有UNIx操作系统都可以运行SSH
1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。
需要指出的是,SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。本文针对的实现是OpenSSH,它是开源软件,应用非常广泛。

此外,本文只讨论SSH在Linux Shell中的用法。如果要在Windows系统中使用SSH,会用到另一种软件PuTTY,这个有时间各位可以去了解
2.基本使用
SSH主要用于远程登录。假定你要以用户名user,登录远程主机host,只要一条简单命令就可以了。

$ ssh user@hostIP
如果本地用户名与远程用户名一致,登录时可以省略用户名。

$ ssh host
SSH的默认端口是22,也就是说,你的登录请求会送进远程主机的22端口。使用p参数,可以指定端口。

#这条命令表示,ssh直接连接远程主机的2222端口。
$ ssh -p 2222 user@host
3.中间人攻击
SSH之所以能够保证安全,原因在于它采用了公钥加密。

整个过程是这样的:

远程主机收到用户的登录请求,把自己的公钥发给用户。
用户使用这个公钥,将登录密码加密后,发送回来。
远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。
这个过程本身是安全的,但是实施的时候存在一个风险:

如果攻击者插在用户与远程主机之间(比如在公共的wifi区域),用伪造的公钥,获取用户的登录密码。再用这个密码登录远程主机,那么SSH的安全机制就荡然无存了。因为不像https协议,SSH协议的公钥是没有证书中心(CA)公证的,也就是说,都是自己签发的。这种风险就是著名的"中间人攻击"(Man-in-the-middle attack)。
SSH协议是如何应对的呢?

4.SSH提供2种级别的安全验证
1. 基于密码的安全验证
只要你知道自己帐号和密码,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。

用公钥加密的内容只能用私钥解密,用私钥加密的内容只能用公钥解密。

安全链接的过程是:

远程主机端收到客户端的登陆请求时先发送自己的公钥给客户端
客户端用拿到的公钥加密用户名和密码,然后发送给远程主机
远程主机用自己的私钥解密收到的用户名和密码,然后校验用户名和密码是否正确,如果正确则登陆成功。
如果你是第一次登录对方主机,系统会出现下面的提示:

  $ ssh user@host
  The authenticity of host 'host (12.18.429.21)' can't be established.
  RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.
  Are you sure you want to continue connecting (yes/no)?
这段话的意思是,无法确认host主机的真实性,只知道它的公钥指纹,问你还想继续连接吗?

所谓"公钥指纹",是指公钥长度较长(这里采用RSA算法,长达1024位),很难比对,所以对其进行MD5计算,将它变成一个128位的指纹。
上例中是98:2e:d7:e09f:ac:67:28:c2:42:2d:37:16:58:4d,再进行比较,就容易多了。
很自然的一个问题就是,用户怎么知道远程主机的公钥指纹应该是多少?回答是没有好办法,远程主机必须在自己的网站上贴出公钥指纹,以便用户自行核对。

假定经过风险衡量以后,用户决定接受这个远程主机的公钥。

Are you sure you want to continue connecting (yes/no)? yes
系统会出现一句提示,表示host主机已经得到认可。

Warning: Permanently added 'host,12.18.429.21' (RSA) to the list of known hosts.
然后,会要求输入密码。

Password: (enter password)
如果密码正确,就可以登录了。

当远程主机的公钥被接受以后,它就会被保存在文件$HOME/.ssh/known_hosts之中。下次再连接这台主机,系统就会认出它的公钥已经保存在本地了,从而跳过警告部分,直接提示输入密码。

每个SSH用户都有自己的known_hosts文件,此外系统也有一个这样的文件,通常是/etc/ssh/ssh_known_hosts,保存一些对所有用户都可信赖的远程主机的公钥。

2. 基于密匙的安全验证
需要依靠密匙,也就是你必须为自己创建一对密匙,公匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公匙,然后把它和你发送过来的公匙进行比较。如果两个密匙一致,服务器就用公匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私匙解密再把它发送给服务器。

用这种方式,你必须知道自己密匙的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。
第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。但是整个登录的过程可能需要10秒
公钥登录的流程如下:

客户端在自己本地生成一对公钥密钥文件,然后将公钥存储在远程主机上
客户端登陆时,远程主机会随机生成一串字符串发送给客户端
客户端用自己的密钥将收到的字符串加密,并返回给远程主机
远程主机利用公钥解密收到的加密字符串,如果解密成功并且与发送的一致则直接免密登陆。
使用密码登录,每次都必须输入密码,非常麻烦。好在SSH还提供了公钥登录,可以省去输入密码的步骤。

所谓"公钥登录",原理很简单,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。

这种方法要求用户必须提供自己的公钥。如果没有现成的,可以直接用ssh-keygen生成一个:

$ ssh-keygen                                             #git克隆gitee等远程url用到此种加密方式进行免密码登录
运行上面的命令以后,系统会出现一系列提示,可以一路回车。其中有一个问题是,要不要对私钥设置口令(passphrase),如果担心私钥的安全,这里可以设置一个。

运行结束以后,在$HOME/.ssh/目录下,会新生成两个文件:id_rsa.pub和id_rsa。前者是你的公钥,后者是你的私钥。

这时再输入下面的命令,将公钥传送到远程主机host上面:

$ ssh-copy-id user@host
好了,从此你再登录,就不需要输入密码了。
如果还是不行,就打开远程主机的/etc/ssh/sshd_config这个文件,检查下面几行前面"#"注释是否取掉。

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
然后,重启远程主机的ssh服务。

#centos
service sshd restart
#或者 systemctl restart sshd.service

# ubuntu系统
service ssh restart

#debian系统
/etc/init.d/ssh restart

3.authorized_keys文件
远程主机将用户的公钥,保存在登录后的用户主目录的$HOME/.ssh/authorized_keys文件中。公钥就是一段字符串,只要把它追加在authorized_keys文件的末尾就行了。

这里不使用上面的ssh-copy-id命令,改用下面的命令,解释公钥的保存过程:

$ ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
这条命令由多个语句组成,依次分解开来看:

"$ ssh user@host",表示登录远程主机;
单引号中的mkdir .ssh && cat >> .ssh/authorized_keys,表示登录后在远程shell上执行的命令:
"$ mkdir -p .ssh"的作用是,如果用户主目录中的.ssh目录不存在,就创建一个;
'cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub的作用是,将本地的公钥文件``~/.ssh/id_rsa.pub,重定向追加到远程文件authorized_keys的末尾。
写入authorized_keys文件后,公钥登录的设置就完成了。

4.SSH高级使用
4.1.远程操作
SSH不仅可以用于远程主机登录,还可以直接在远程主机上执行操作。

上一节authorized_keys文件的操作,就是一个例子:

$ ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
单引号中间的部分,表示在远程主机上执行的操作;后面的输入重定向,表示数据通过SSH传向远程主机。

这就是说,SSH可以在用户和远程主机之间,建立命令和数据的传输通道,因此很多事情都可以通过SSH来完成。

下面看几个例子。

将$HOME/src/目录下面的所有文件,复制到远程主机的$HOME/src/目录。

$ cd && tar czv src | ssh user@host 'tar xz'
将远程主机$HOME/src/目录下面的所有文件,复制到用户的当前目录。

$ ssh user@host 'tar cz src' | tar xzv
查看远程主机是否运行进程httpd。

$ ssh user@host 'ps ax | grep [h]ttpd'
4.2.绑定端口
既然SSH可以传送数据,那么我们可以让那些不加密的网络连接,全部改走SSH连接,从而提高安全性。

假定我们要让8080端口的数据,都通过SSH传向远程主机,命令就这样写:

$ ssh -D 8080 user@host
SSH会建立一个socket,去监听本地的8080端口。一旦有数据传向那个端口,就自动把它转移到SSH连接上面,发往远程主机。可以想象,如果8080端口原来是一个不加密端口,现在将变成一个加密端口。

4.3.本地端口转发
有时,绑定本地端口还不够,还必须指定数据传送的目标主机,从而形成点对点的"端口转发"。为了区别后文的"远程端口转发",我们把这种情况称为"本地端口转发"(Local forwarding)。

假定host1是本地主机,host2是远程主机。由于种种原因,这两台主机之间无法连通。但是,另外还有一台host3,可以同时连通前面两台主机。因此,很自然的想法就是,通过host3,将host1连上host2。

我们在host1执行下面的命令:

$ ssh -L 2121:host2:21 host3
命令中的L参数一共接受3个值,分别是"本地端口:目标主机:目标主机端口",它们之间用冒号分隔。

这条命令的意思,就是指定SSH绑定本地端口2121,然后指定host3将所有的数据,转发到目标主机host2的21端口(假定host2运行FTP,默认端口为21)。
这样一来,我们只要连接host1的2121端口,就等于连上了host2的21端口。

$ ftp localhost:2121
"本地端口转发"使得host1和host3之间仿佛形成一个数据传输的秘密隧道,因此又被称为"SSH隧道"。

下面是一个比较有趣的例子。

$ ssh -L 5900:localhost:5900 host3
它表示将本机的5900端口绑定host3的5900端口(这里的localhost指的是host3,因为目标主机是相对host3而言的)。

另一个例子是通过host3的端口转发,ssh登录host2。

$ ssh -L 9001:host2:22 host3
这时,只要ssh登录本机的9001端口,就相当于登录host2了。

$ ssh -p 9001 localhost
上面的-p参数表示指定登录端口。

4.4.远程端口转发
既然"本地端口转发"是指绑定本地端口的转发,那么"远程端口转发"(remote forwarding)当然是指绑定远程端口的转发。

还是接着看上面那个例子,host1与host2之间无法连通,必须借助host3转发。但是,特殊情况出现了,host3是一台内网机器,它可以连接外网的host1,但是反过来就不行,外网的host1连不上内网的host3。这时,"本地端口转发"就不能用了,怎么办?

解决办法是:既然host3可以连host1,那么就从host3上建立与host1的SSH连接,然后在host1上使用这条连接就可以了。
我们在host3执行下面的命令:

$ ssh -R 2121:host2:21 host1
R参数也是接受3个值,分别是"远程主机端口:目标主机:目标主机端口"。
这条命令的意思,: 就是让host1监听它自己的2121端口,然后将所有数据经由host3,转发到host2的21端口。由于对于host3来说,host1是远程主机,所以这种情况就被称为"远程端口绑定"。
绑定之后,我们在host1就可以连接host2了:

$ ftp localhost:2121
这里必须指出,"远程端口转发"的前提条件是,host1和host3两台主机都有sshD和ssh客户端。

4.5.SSH的其他参数
SSH还有一些别的参数,也值得介绍。

N参数,表示只连接远程主机,不打开远程shell;

T参数,表示不为这个连接分配TTY。

这2个参数可以放在一起用,代表这个SSH连接只用来传数据,不执行远程操作。

$ ssh -NT -D 8080 host
f参数,表示SSH连接成功后,转入后台运行。这样一来,你就可以在不中断SSH连接的情况下,在本地shell中执行其他操作。

$ ssh -f -D 8080 host
要关闭这个后台连接,就只有用kill命令去杀掉进程。
SSH协议详解
SSH服务详解

二.SFTP协议
基本介绍
SFTP,称为 “安全文件传输协议”。SSH File Transfer Protocol的缩写,SFTP与FTP有着几乎一样的语法和功能。是SSH内含协议,也就是说只要ssh服务器启动了,sftp就可使用,不需要额外安装(SFTP 为 SSH的其中一部分.),它的默认端口和SSH一样为22。

SFTP通过使用加密/解密技术来保障传输文件的安全性,因此SFTP的传输效率比普通的FTP要低,但sftp的安全性要比ftp高,因此sftp通常用于报表、对账单等对安全性要求较高的场景。
SFTP要求客户端必须由服务器进行身份验证,并且数据传输必须通过安全通道(SSH)进行,即不传输明文密码或文件数据。它允许对远程文件执行各种操作,有点像远程文件系统协议。SFTP允许从暂停传输,目录列表和远程文件删除等操作中恢复。
基本用法
#连接sftp服务端
E:\dev_tools\>sftp -oPort=22 root@192.168.0.205
root@192.168.0.205's password:
Connected to root@192.168.0.205.

#下载单个文件
sftp>get /data/huawei_saas_api_mybatis_plus.tar.gz E:\data

#上传单个文件
sftp>put E:\huawei_saas_api_mybatis_plus.tar.gz /data
说明:

-o 连接的时候指定选项
Port=22 端口指定为22
sftp使用参数说明
操作远程服务器

ls 显示远端主机的列表

cd 切换远程的工作目录

pwd 显示远程的工作目录

操作本地服务器

lls 显示本地主机的列表

lcd 切换本地的工作目录

lpwd 查看本地目录信息

上传下载文件参数

get — 表示从远程服务器下载数据(单个文件)

mget — 表示下载多个文件

put — 表示从本地服务器上传数据(单个文件)

mput — 表示上传多个文件

查看帮助的方式:

sftp> help 显示帮助信息
三.FTP协议
FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议族中的协议之一。

FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。
在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。
此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。
默认情况下FTP协议使用TCP端口中的 20和21这2个端口,其中20用于传输数据,21用于传输控制信息。

但是,是否使用20作为传输数据的端口与FTP使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20; 如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。
ftp的连接ftp服务端的方式和sftp一样,上传下载命令的使用方式也一样

四.SFTP、FTP主要区别
SFTP和FTP非常相似,都支持批量传输(一次传输多个文件),目录导航,目录移动,目录创建,文件删除等。但还是存在着差异,下面我们来看看SFTP和FTP之间的区别。

而 SFTP 协议是在 FTP 的基础上对数据进行加密,使得传输的数据相对来说更安全。但是这种安全是以牺牲效率为代价的,也就是说 SFTP 的传输效率比 FTP 要低(不过现实使用当中,没有发现多大差别)。
SFTP使用

安全通道
FTP 不提供任何安全通道来在主机之间传输文件;而SFTP协议提供了一个安全通道(SSH)来加密传输认证信息和传输的数据。

使用的协议
FTP使用TCP / IP协议。而,SFTP是SSH协议的一部分,它是一种远程登录信息。

连接方式
FTP使用TCP端口21上的控制连接建立连接。而SFTP是在客户端和服务端之间通过SSH协议(TCP端口22)立的安全连接来传输文件。

安全性
FTP密码和数据以纯文本格式发送,大多数情况下是不加密的,安全性不高。而SFTP会在发送之前加密数据,二进制的形式传递,是无法“按原样”阅读的,安全性较高。

总结

FTP 基于TCP来传输文件,明文传输用户信息和数据。
SFTP 基于SSH来加密传输文件,可靠性高,可断点续传。
五.Telnet协议
基本介绍
Telnet(远程登录协议) 是 TCP/IP 协议族中的协议之一。主要用于远程登录其他主机, 默认端口为23

主要用于远程登录,通过本机的Telnet客户端,登录到远程的Telnet服务器,从而实现在本地远程操作和控制服务器。
搭建或配置网络环境时,经常会使用ping命令检查网络是否可达。有些时候Ping命令也不好使,比如因防火墙禁止或访问策略限制等。则可使用telnet测试映射端口或远程访问主机。
工作流程
Telnet 协议工作有规范的流程,大致包括连接、执行命令和断开连接 3 个部分。具体工作流程如图所示。

其中,工作流程分为 6 个步骤,每个步骤含义如下:

Telnet 客户端通过 TCP 协议的三次握手与 Telnet 服务器建立连接。
建立连接后,需要通过用户名和密码才能远程登录到服务器。因此,服务器要求客户端提供用户名和密码。
Telnet 客户端输入用户名和密码,尝试登录服务器。
成功登录后客户端向服务器发送要执行的命令。
服务器收到客户端发来的执行命令,开始执行命令,并将结果返回给客户端。
客户端不再需要远程执行命令,将向服务器发送 TCP 断开数据包,用于撤销连接。
telnet部署安装
安装telnet服务端

$ yum install telnet telnet-server -y
设置开机自启动
$ vim /etc/xinetd.d/telnet
修改xinetd下的配置文件,从而管理telnet服务
$ vim /etc/xinetd.d/telnet
# default: on
# description: The telnet server serves telnet sessions; it uses \
# unencrypted username/password pairs for authentication.
service telnet
{
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
disable = no
}
启动xinetd 服务,让telnet能够开机自启动
$ /etc/init.d/xinetd start

Starting xinetd: [ OK ]
telnet客户端测试
说明: telnet服务默认不支持root用户直接登陆。

$ telnet 10.0.0.250

Connecting to 10.0.0.250:23...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
CentOS release 6.9 (Final)
Kernel 2.6.32-696.el6.x86_64 on an x86_64
test login: oldboy

Password:

Last login: Wed Oct 18 09:41:19 from 10.0.0.1
[oldboy@test ~]$
telnet使用参数
执行的命令如下:

telnet 主机名
主机名表示要连接的远程计算机的名称或 IP 地址。成功连接上以后,进入 Telnet 控制台。用户输入的子命令将在远程计算机上执行。

Telnet 常用的子命令及含义如下:

open:建立到远程主机的 Telnet 连接,子命令后跟主机名称或 IP 地址。
close:关闭现有的 Telnet 连接。
display:查看 Telnet 客户端的当前设置。
mode:设置文件传输模式。其中,ASCII 的文件传输模式适用于传输文本文件,而二进制的文件传输模式适用于其他类型的文件,如可执行文件、图片。
send:向远程计算机发送特殊的 Telnet 协议指令序列,如终止指令序列、中断指令序列或文件结束指令序列。
set:对 Telnet 客户端进行设置。
status:显示状态信息。
environ:设置环境变量。环境变量可以被操作系统用来提供特定的用户或计算机信息。
logout:注销远程用户并关闭连接。
quit:退出 Telnet 程序。
unset:取消对 Telnet 客户端的设置。
toggle:切换操作参数。
z:暂停 Telnet 登录。
?:显示帮助信息。
ssh与telnet区别

ssh是加密的服务协议,telnet服务是非加密的

ssh服务默认支持root用户登陆,telnet用户默认不支持root用户登陆

六.拓展
SCP协议
SCP就是资源复制协议,Secure copy,是用来在SCP 客户端和SCP 客户端进行远程文件复制的,并且数据传输必须通过安全通道(SSH)进行。 是SSH内置工具,也就是说只要ssh服务器启动了,scp就可使用,不需要额外安装它的默认端口和SSH一样为22。

如何上传和下载
上传

scp -P22 -rp E:\dev_tools root@192.168.0.201:/data/dev_tools

参数说明:
# -P(大写,注意和ssh命令的不同)接端口,默认22端口时可以省略-P22;
# -r递归,表示拷贝目录;
# -p表示在拷贝前后保持文件或目录属性;
# -l limit 限制速度。
# E:\dev_tools 为本地的目录。“@”前为用户名,“@”后为要连接的服务器的IP。IP后的:/data/dev_tools,为远程服务端目录。

以上命令作用是把本地E:\dev_tools拷贝到远端服务器192.168.0.201的/data/dev_tools目录;

下载

scp -P22 -rp root@192.168.0.201:/data/dev_tools E:\dev_tools
以上命令作用是远端服务器192.168.0.201的/data/dev_tools目录下载到本地 E:\dev_tools目录

其他测试案例

# 拷贝本地文件到远程:
scp filename.txt user@host:some/directory
# 拷贝本地文件到远程,使用指定端口:
scp -P 2234 filename.txt user@host:some/directory
# 拷贝多个文件到远程home:
scp filename1.txt filename2.txt user@host:~
# 拷贝远程文件到本地:
scp user@host:directory/filename.txt /directory
# 拷贝远程文件夹到本地:
scp -r user@host:directory/folder .
# 拷贝远程文件到远程:
scp user@host1:directory/filename.txt user@host1:directory
命令参数:

-1: 强制scp命令使用协议ssh1
-2: 强制scp命令使用协议ssh2
-4: 强制scp命令只使用IPv4寻址
-6: 强制scp命令只使用IPv6寻址
-B: 使用批处理模式(传输过程中不询问传输口令或短语)
-C: 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
-p:保留原文件的修改时间,访问时间和访问权限。
-q: 不显示传输进度条。
-r: 递归复制整个目录。
-v:详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
-c cipher: 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
-F ssh_config: 指定一个替代的ssh配置文件,此参数直接传递给ssh。
-i identity_file: 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
-l limit: 限定用户所能使用的带宽,以Kbit/s为单位。
-o ssh_option: 如果习惯于使用ssh_config(5)中的参数传递方式,
-P port:注意是大写的P, port是指定数据传输用到的端口号
-S program: 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。
FTP 、SFTP 、SCP 都可以用来传输文件,区别主要为

FTP 基于TCP来传输文件,明文传输用户信息和数据。
SFTP 基于SSH来加密传输文件,可靠性高,可断点续传。
SCP 是基于SSH来加密拷贝文件,但要知道详细目录,不可断点续传。
TFTP协议
TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在TFTP客户端与TFTP服务端之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。它基于UDP协议而实现,默认端口号为69。

它适合传送 “简单” 的文件。与FTP不同的是,它使用的是UDP的69端口,只能上传下载文件,不能列出目录。因此它可以穿越许多防火墙。不过它也有缺点,比如传送不可靠、没有密码验证等。虽然如此,它还是非常适合传送小型文件的。
tftp命令的语法:tftp -i host [get\put] source [destinqtion]

-i 二进制文件传输
host TFTP服务器地址
get 下载文件
put 上传文件
sourse 文件名
destination 目的地

windows下开启TFTP客户端服务

上传:

# 192.168.1.101为客户端IP,
tftp -pl test.txt 192.168.1.101
下载:

#192.168.1.101为服务器IP,服务器端目录下的test.txt文件下载到客户端
tftp -gr test.txt 192.168.1.101
注:在客户端执行语句

注意事项

tftp监听的是69号端口, 走的是UDP协议, 所以tftp相对来说, 是不稳定的, 如果传输大文件的时候会出现问题
tftp默认的上传目录是tftp32.exe的目录
tftp默认的下载目录也是tftp32.exe的目录
常见协议
网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。

协议定义了两个以上通信实体之间交换报文格式和顺序所遵从的标准。
SMTP 协议 :提供电子邮件服务的协议叫做 SMTP 协议, SMTP 在传输层也使用了 TCP 协议。SMTP 协议主要用于系统之间的邮件信息传递,并提供有关来信的通知。

DNS 协议:由于 IP 地址是计算机能够识别的地址,而我们人类不方便记忆这种地址,所以为了方便人类的记忆,使用 DNS 协议,来把我们容易记忆的网络地址映射称为主机能够识别的 IP 地址。

ARP 协议:ARP 是一种解决地址问题的协议,通过 IP 位线索,可以定位下一个用来接收数据的网络设备的 MAC 地址。如果目标主机与主机不在同一个链路上时,可以通过 ARP 查找下一跳路由的地址。不过 ARP 只适用于 IPv4 ,不适用于 IPv6。

RARP:RARP 就是将 ARP 协议反过来,通过 MAC 地址定位 IP 地址的一种协议。

代理 ARP:用于解决 ARP 包被路由器隔离的情况,通过代理 ARP 可以实现将 ARP 请求转发给临近的网段。

ICMP 协议:Internet 报文控制协议,如果在 IP 通信过程中由于某个 IP 包由于某种原因未能到达目标主机,那么将会发送 ICMP 消息,ICMP 实际上是 IP 的一部分。

DHCP 协议:DHCP 是一种动态主机配置协议。使用 DHCP 就能实现自动设置 IP 地址、统一管理 IP 地址分配,实现即插即用。

NAT 协议:网络地址转换协议,它指的是所有本地地址的主机在接入网络时,都会要在 NAT 路由器上讲其转换成为全球 IP 地址,才能和其他主机进行通信。

IGP:内部网关协议,一般用于企业内部自己搭建的路由自治系统。

EGP:外部网关协议,EGP 通常用于在网络主机之间相互交换路由信息。

RIP :一种距离向量型路由协议,广泛应用于 LAN 网。

OSPF:是根据 OSI 的 IS-IS 协议提出的一种链路状态型协议。这种协议还能够有效的解决网络环路问题。

MAC 协议:媒体访问控制协议,它规定了帧在链路上传输的规则。
参考地址:https://blog.csdn.net/qq877728715/article/details/118024910?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-118024910-blog-6624310.pc_relevant_aa&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-118024910-blog-6624310.pc_relevant_aa&utm_relevant_index=1

SSH、SFTP、FTP、Telnet、SCP、TFTP协议的原理的更多相关文章

  1. 太实用了!自己动手写软件——SSH、FTP和SQL server的密码破解

    我们的密码破解工具一共分为如下六个部分,前面四个部分我们都有在之前的文章中介绍过了 用户图形界面——GUI编程 密码字典获取——Excel文件读取 数据库类——MySQL.Oracle和SQL ser ...

  2. FTP 与 SSH 的安全性对比, 以及FTP,SSH,SFTP,SCP 的关系简单解析!

    FTP 与 SSH 的安全性对比? ftP: http://baike.baidu.com/subview/369/6149695.htm TCP/IP协议中,FTP标准命令TCP端口号为21,Por ...

  3. MQTT协议 局域网和广域网 云服务器和虚拟主机、VPS SSH和FTP、SFTP

     MQTT协议 MQTT协议就很好的解决了coap存在的问题.MQTT协议是由IBM开发的即时通讯协议,相比来说比较适合物联网场景的通讯协议.MQTT协议采用发布/订阅模式,所有的物联网终端都通过TC ...

  4. Solaris10下Telnet、SSH、ftp使用root登录

    学习solaris过程中,使用SecureCRT.putty等工具用root账号登录,总是登录不上去,后来经老师解答和网上找答案,发现是 solaris默认是不可以远程使用root账号登录的,如果想开 ...

  5. FTP(文件传输协议)工作原理

    目前在网络上,如果你想把文件和其他人共享.最方便的办法莫过于将文件放FTP服务器上,然后其他人通过FTP客户端程序来下载所需要的文件. 1.FTP架构 如同其他的很多通讯协议,FTP通讯协议也采用客户 ...

  6. 网络基础配置--开启SSH,关闭Telnet

    1.Telnet和SSH对比 1.1.TELNET 使用Telnet这个用来访问远程计算机的TCP/IP协议以控制你的网络设备相当于在离开某个建筑时大喊你的用户名和口令.很快会有人进行监听,并且他们会 ...

  7. 使用SSH+SFTP操作终端全解析,告别XShell

    1.前言 在Windows系统下操作远程服务器的方式很多,比如XShell+XFTP组合,亦或是PuTTY+WinSCP组合,但在Mac系统下登陆远程服务器,并没有这些工具供我们使用.相比较而言,在M ...

  8. 初入网络系列笔记(6)TFTP协议

    一.借鉴说明,本博文借鉴以下博文 1.锤子,FTP协议,http://www.cnblogs.com/loadrunner/archive/2008/01/09/1032264.html 2.suna ...

  9. Fail2ban 防止暴力破解centos服务器的SSH或者FTP账户

    次尝试登陆root账户失败的情况.[说明服务器被攻击了]   logtarget = SYSLOG  #我们需要做的就是把这行改成/var/log/fail2ban.log,方便用来记录日志信息 so ...

  10. ftp (文件传输协议)

    ftp (文件传输协议) 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议” ...

随机推荐

  1. yii框架中 不能正确正常使用phpredis 路径安装好后还是报 Class yii\redis\Connection does not exist!

    1,成功解决方案 在yiisoft / extensions.php 中添加如下数组 指向目录 'yiisoft/yii2-redis' =>array(      'name'=>'yi ...

  2. No.1.6

    结构伪类选择器 根据元素在HTML中的结构关系查找元素 选择器 说明 E:first-child{} 匹配父元素中的第一个子元素,并且是E元素 E:last-child{} 匹配父元素中的最后一个子元 ...

  3. We've detected suspicious behavior from phone numbers similar to yours. Please try again later or contact us through our help center at help.openai.com.

    原因 很多人使用该地区号码,被限制住了 解决办法 过会儿再试,或者换个地区接码

  4. window java 字节码修改

    前提:  win10 安装包: 1.  JDK10.0.1.msi (包含jre环境),    JDK的安装路径 2.  jclasslib 6.0.3    用于编辑常量 3.JBE    用于编辑 ...

  5. Net6 托管服务、FluentValidation

    Net6 托管服务.FluentValidation 托管服务 1.场景,代码运行在后台.比如服务器启动的时候在后台预先加载数据到缓存,每天凌晨3点把数据导出到备份数据库,每隔5秒钟在两张表之间同步一 ...

  6. 打包Assetbundle

    using UnityEngine;using System.Collections;using UnityEditor;/// <summary>/// 脚本位置:Editor文件夹下/ ...

  7. Pytorch————学习1

    torch.nn  仅支持小批量.整个torch.nn程序包仅支持作为小批量样本的输入,而不支持单个样本. 例如,nn.Conv2d采用的是4D张量:nSamples x nChannels x He ...

  8. 20211306 2021-2022-2 《Python程序设计》第二次实验报告

    20211306 2021-2022-2 <Python程序设计>第二次实验报告 课程:<Python程序设计> 班级:2113 姓名:丁文博 学号:20211306 实验教师 ...

  9. 定长线程池Demo

    1 import java.util.concurrent.ExecutorService; 2 import java.util.concurrent.Executors; 3 4 /** 5 * ...

  10. css 背景渐变

    1.渐变从左到右 background: linear-gradient(to right,#000,#fff); 2.渐变从上到下 background: linear-gradient(tobot ...