ssh是安全协议吗.docx
《ssh是安全协议吗.docx》由会员分享,可在线阅读,更多相关《ssh是安全协议吗.docx(11页珍藏版)》请在冰豆网上搜索。
ssh是安全协议吗
竭诚为您提供优质文档/双击可除
ssh是安全协议吗
篇一:
ssh协议
(3)ssh协议
介绍:
ssh是英文secureshell的简写形式。
通过使用ssh,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止dns欺骗和ip欺骗。
使用ssh,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。
ssh有很多功能,它既可以代替telnet,又可以为Ftp、pop、甚至为ppp提供一个安全的"通道"。
用法:
一.服务端
(一)(linux系统)
1.测试ssh服务器是否开启
启动ssh服务非常的简单,在现在大多数的linux版本中都是默认启动了ssh服务的。
使用netstat-a查看ssh否开启,如出现相应端口22则为启用;
2.如何启动ssh服务
启动的方式:
serversshdrestart或/etc/init.d/sshdsshd。
(二)(windows系统)
1.测试ssh服务器是否开启
在windows下没有ssh服务端和客户端,需要下载软件安装(xshell)
2.如何启动ssh服务
下载安装成功即可
(三)(windowsxp系统)
1.测试ssh服务器是否开启
下载ssh服务端和客户端控件,安装完成。
2.在ie浏览器登录运维安全审计系统—添加资源—授权—单点登录即可通过ssh连接远程服务器。
二.客户端
(linux系统)
1.连接到远程主机指定的端口
linux系统中”打开终端”输入如下命令:
ssh堡垒机帐号@堡垒机ip地址-p20xx命令格式:
sshname@remoteserver-p20xx
说明:
p参数指定端口号,通常在路由里做端口映射时,我们不会把22端口直接映射出去,而是转换成其他端口号,这时就需要使用-p端口号命令格
(windows系统)
1.xshell远程连接linux
2.打开xshell
3.打开xshell,输入远程linux的ip地址
到如下会话框:
起名字为danjitest.
4.建立会话框
单击确定,会看到如下会话框:
5.输入用户名和密码,点击确定。
这样就能在window下远程操控linux了
三.ssh技术补充
(linux系统)
1.通过远程主机1跳到远程主机2:
命令格式:
ssh-tremoteserver1sshremoteserver2
说明:
当远程主机remoteserver2无法直接到达时,可以使用-t参数,然后由remoteserver1跳转到remoteserver2。
在此过程中要先输入remoteserver1的密码,然后再输入remoteserver2的密码,然后就可以操作remoteserver2了。
2.通过ssh运行远程shell命令:
命令格式:
ssh-lnameremoteserver‘command’
说明:
连接到远程主机,并执行远程主机的command命令。
例如:
查看远程主机的内存使用情况。
3.修改ssh监听端口:
默认情况下,ssh监听连接端口22,攻击者使用端口扫描软件就可以看到主机是否运行有ssh服务,将ssh端口修改为大于1024的端口是一个明智的选择,因为大多数端口扫描软件(包括nmap)默认情况都不扫描高位端口。
打开/etc/ssh/sshd_config文件并查找下面这样的行:
port22
去掉该行前面的#号,然后修改端口号并重新启动ssh服务:
$/etc/init.d/sshrestart
4.仅允许ssh协议版本2:
有两个ssh协议版本,仅使用ssh协议版本2会更安全,ssh协议版本1有安全问题,包括中间人攻击(man-in-the-middle)和注入(insertion)攻击。
编辑/etc/ssh/sshd_config文件并查找下面这样的行:
#protocol2,1修改为protocol2
5.禁止root用户登录:
通常情况下,不采用直接用root用户登录到远程主机,由于root用户拥有超级权限,这样会带来安全隐患,所以,一般我们用普通用户登录,当需要管理远程主机时,再切换到root用户下。
打开/etc/ssh/sshd_config文件并查找下面这样的行:
#permitRootloginyes
将#号去掉,然后将yes修改成no,重启ssh服务,这样就可以禁止root用户登录。
6.设置登录时提示信息
首先编辑一个文件,如bannertest.txt,文件内容自行定义。
然后打开/etc/ssh/sshd_config文件并查找下面这样的行:
#banner/some/path
将#号去掉,然后将bannertest.txt文件的全路径替换/some/path,然后保存,重启ssh服务。
当客户端登录时,就会看到bannertest.txt文件中的提示信息。
7.进行端口映射:
假如公司内网有台web服务器,但是只对内不对外,这样,外网就无法访问,可以用ssh进行端口映射来实现外网访问内网的web服务器。
假如web服务器名为webserver,webserver可以用ssh访问到远端主机remoteserver,登录到webserver,然后用下面命令进行映射
命令格式:
ssh-R3000:
localhost:
80remoteserver
执行完成后,在remoteserver机器上,执行netstat-an|grep3000,查看有没有开通
篇二:
ssh协议介绍
ssh协议介绍
20xx年05月31日星期日21:
03
1、什么是ssh
ssh是英文secureshell的简写形式。
通过使用ssh,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止dns欺骗和ip欺骗。
使用ssh,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。
ssh有很多功能,它既可以代替telnet,又可以为Ftp、pop、甚至为ppp提供一个安全的"通道"。
2、ssh协议的内容
ssh协议是建立在应用层和传输层基础上的安全协议,它主要由以下三部分组成,共同实现ssh的安全保密机制。
传输层协议,它提供诸如认证、信任和完整性检验等安全措施,此外它还可以任意地提供数据压缩功能。
通常情况下,这些传输层协议都建立在面向连接的tcp数据流之上。
用户认证协议层,用来实现服务器的跟客户端用户之间的身份认证,它运行在传输层协议之上。
连接协议层,分配多个加密通道至一些逻辑通道上,它运行在用户认证层协议之上。
当安全的传输层连接建立之后,客户端将发送一个服务请求。
当用户认证层连接建立之后将发送第二个服务请求。
这就允许新定义的协议可以和以前的协议共存。
连接协议提供可用作多种目的通道,为设置安全交互shell会话和传输任意的tcp/ip端口和x11连接提供标准方法。
3、ssh的安全验证
从客户端来看,ssh提供两种级别的安全验证。
第一种级别(基于口令的安全验证),只要你知道自己的帐号和口令,就可以登录到远程主机,并且所有传输的数据都会被加密。
但是,这种验证方式不能保证你正在连接的服务器就是你想连接的服务器。
可能会有别的服务器在冒充真正的服务器,也就是受到"中间人"这种攻击方式的攻击。
第二种级别(基于密匙的安全验证),需要依靠密匙,也就是你必须为自己创建一对密匙,并把公有密匙放在需要访问的服务器上。
如果你要连接到ssh服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。
服务器收到请求之后,先在你在该服务器的用户根目录下寻找你的公有密匙,然后把它和你发送过来的公有密匙进行比较。
如果两个密匙一致,服务器就用公有密匙加密"质询"(challenge)并把它发送给客户端软件。
客户端软件收到"质询"之后就可以用你的私人密匙解密再把它发送给服务器。
与第一种级别相比,第二种级别不需要在网络上传送用户口令。
另外,第二种级别不仅加密所有传送的数据,而"中间人"这种攻击方式也是不可能的(因为他没有你的私人密匙)。
但是整个登录的过程可能慢一些。
4、ssh的应用
首先,ssh最常见的应用就是,用它来取代传统的telnet、Ftp等网络应用程序,
通过ssh登录到远方机器执行你想进行的工作与命令。
在不安全的网路通讯环境中,它提供了很强的验证(authentication)机制与非常安全的通讯环境。
实际上,ssh开发者的原意是设计它来取代原unix系统上的rcp、rlogin、rsh等指令程序的;但经过适当包装后,发现它在功能上完全可以取代传统的telnet、Ftp等应用程序。
传统bsd风格的r系列指令(如rcp,rsh,rlogin)往往都被视为不安全的,很容易就被各种网络攻击手段所破解,几乎所有找得到有关unix安全的书或文件,都会一而再、再而三地警告系统管理者,留心r系列指令的设定,甚至要求系统管理者将r系列指令通通关闭。
而用来替代r系列指令的ssh,则在安全方面做了极大的强化,不但对通讯内容可以进行极为安全的加密保护,同时也强化了对身份验证的安全机制,它应用了在密码学(cryptography)中已发展出来的数种安全加密机制,如symmetrickeycryptography,asymmetrickeycryptography,one-wayhashFunction,Random-numbergeneration等,来加强对于身份验证与通讯内容的安全保护。
通讯时资料的加密有idea,three-keytripledes,des,Rc4-128,tss,blowfish等数种多种安全加密算法可供选择,加密的key则是通过Rsa进行交换的。
资料的加密可以对抗ipspoofing,Rsa这种非对称性的加密机制则可用来对抗dnsspoofing与iproutingspoofing,同时Rsa也可以进行对主机身份的验证。
其次,通过使用用ssh可以在本地主机和远程服务器之间设置"加密通道",并且这样设置的"加密通道"可以跟常见的pop应用程序、x应用程序、linuxconf应用程序相结合,提供安全保障。
ssh的"加密通道"是通过"端口转发"来实现的。
你可以在本地端口(没有用到的)和在远程服务器上运行的某个服务的端口之间建立"加密通道"。
然后只要连接到本地端口。
所有对本地端口的请求都被ssh加密并且转发到远程服务器的端口。
当然只有远程服务器上运行ssh服务器软件的时候"加密通道"才能工作。
ssh协议体系结构解读
1、概念
ssh的英文全称为secureshell,是ietF(internetengineeringtaskForce)的networkworkinggroup所制定的一族协议,其目的是要在非安全网络上提供安全的远程登录和其他安全网络服务。
如需要ssh的详细信息请参考(sshcommunicationssecuritycorporation的网站)和(开放源码的openssh组织的网站)。
2、基本框架
ssh协议框架中最主要的部分是三个协议:
传输层协议、用户认证协议和连接协议。
同时ssh协议框架中还为许多高层的网络安全应用协议提供扩展的支持。
在ssh的协议框架中,传输层协议(thetransportlayerprotocol)提供服务器认证,数据机密性,信息完整性等的支持;用户认证协议(theuserauthenticationprotocol)则为服务器提供客户端的身份鉴别;连接协议(theconnectionprotocol)将加密的信息隧道复用成若干个逻辑通道,提供给更高层的应用协议使用;各种高层应用协议可以相对地独立于ssh基本体系之外,并依靠这个基本框架,通过连接协议使用ssh的安全机制。
3、主机密钥机制
对于ssh这样以提供安全通讯为目标的协议,其中必不可少的就是一套完备的密钥机制。
由于ssh协议是面向互联网网络中主机之间的互访与信息交换,所以主机密钥成为基本的密
钥机制。
也就是说,ssh协议要求每一个使用本协议的主机都必须至少有一个自己的主机密钥对,服务方通过对客户方主机密钥的认证之后,才能允许其连接请求。
一个主机可以使用多个密钥,针对不同的密钥算法而拥有不同的密钥,但是至少有一种是必备的,即通过dss算法产生的密钥。
关于dss算法,请参考[Fips-186]。
ssh协议关于主机密钥认证的管理方案有两种,
每一个主机都必须有自己的主机密钥,密钥可以有多对,每一对主机密钥对包括公开密钥和私有密钥。
在实际应用过程中怎样使用这些密钥,并依赖它们来实现安全特性呢?
如上图所示,ssh协议框架中提出了两种方案。
在第一种方案中,主机将自己的公用密钥分发给相关的客户机,客户机在访问主机时则使用该主机的公开密钥来加密数据,主机则使用自己的私有密钥来解密数据,从而实现主机密钥认证,确定客户机的可靠身份。
在图2(a)中可以看到,用户从主机a上发起操作,去访问,主机b和主机c,此时,a成为客户机,它必须事先配置主机b和主机c的公开密钥,在访问的时候根据主机名来查找相应的公开密钥。
对于被访问主机(也就是服务器端)来说则只要保证安全地存储自己的私有密钥就可以了。
在第二种方案中,存在一个密钥认证中心,所有系统中提供服务的主机都将自己的公开密钥提交给认证中心,而任何作为客户机的主机则只要保存一份认证中心的公开密钥就可以了。
在这种模式下,客户机在访问服务器主机之前,还必须向密钥认证中心请求认证,认证之后才能够正确地连接到目的主机上。
很显然,第一种方式比较容易实现,但是客户机关于密钥的维护却是个麻烦事,因为每次变更都必须在客户机上有所体现;第二种方式比较完美地解决管理维护问题,然而这样的模式对认证中心的要求很高,在互联网络上要实现这样的集中认证,单单是权威机构的确定就是个大麻烦,有谁能够什么都能说了算呢?
但是从长远的发展来看,在企业应用和商业应用领域,采用中心认证的方案是必要的。
另外,ssh协议框架中还允许对主机密钥的一个折中处理,那就是首次访问免认证。
首次访问免认证是指,在某客户机第一次访问主机时,主机不检查主机密钥,而向该客户都发放一个公开密钥的拷贝,这样在以后的访问中则必须使用该密钥,否则会被认为非法而拒绝其访问。
篇三:
ssh协议详解
1、概念
ssh的英文全称为secureshell,是ietF(internetengineeringtaskForce)的networkworkinggroup所制定的一族协议,其目的是要在非安全网络上提供安全的远程登录和其他安全网络服务。
2、基本框架
ssh协议框架中最主要的部分是三个协议:
传输层协议、用户认证协议和连接协议。
同时ssh协议框架中还为许多高层的网络安全应用协议提供扩展的支持。
它们之间的层次关系可以用如下图1来表示:
图1ssh协议的层次结构示意图
在ssh的协议框架中,传输层协议(thetransportlayerprotocol)提供服务器认证,数据机密性,信息完整性等的支持;用户认证协议(theuserauthenticationprotocol)则为服务器提供客户端的身份鉴别;连接协议(theconnectionprotocol)将加密的信息隧道复用成若干个逻辑通道,提供给更高层的应用协议使用;各种高层应用协议可以相对地独立于ssh基本体系之外,并依靠这个基本框架,通过连接协议使用ssh的安全机制。
3、主机密钥机制
对于ssh这样以提供安全通讯为目标的协议,其中必不可少的就是一套完备的密钥机制。
由于ssh协议是面向互联网网络中主机之间的互访与信息交换,所以主机密钥成为基本的密钥机制。
也就是说,ssh协议要求每一个使用本协议的主机都必须至少有一个自己的主机密钥对,服务方通过对客户方主机密钥的认证之后,才能允许其连接请求。
一个主机可以使用多个密钥,针对不同的密钥算法而拥有不同的密钥,但是至少有一种是必备的,即通过dss算法产生的密钥。
关于dss算法,请参考[Fips-186]。
ssh协议关于主机密钥认证的管理方案有两种,如下图2所示:
图2ssh主机密钥管理认证方案示意图
每一个主机都必须有自己的主机密钥,密钥可以有多对,每一对主机密钥对包括公开密钥和私有密钥。
在实际应用过程中怎样使用这些密钥,并依赖它们来实现安全特性呢?
如上图所示,ssh协议框架中提出了两种方案。
在第一种方案中,主机将自己的公用密钥分发给相关的客户机,客户机在访问主机时则使用该主机的公开密钥来加密数据,主机则使用自己的私有密钥来解密数据,从而实现主机密钥认证,确定客户机的可靠身份。
在图2(a)中可以看到,用户从主机a上发起操作,去访问,主机b和主机c,此时,a成为客户机,它必须事先配置主机b和主机c的公开密钥,在访问的时候根据主机名来查找相应的公开密钥。
对于被访问主机(也就是服务器端)来说则只要保证安全地存储自己的私有密钥就可以了。
在第二种方案中,存在一个密钥认证中心,所有系统中提供服务的主机都将自己的公开
密钥提交给认证中心,而任何作为客户机的主机则只要保存一份认证中心的公开密钥就可以了。
在这种模式下,客户机在访问服务器主机之前,还必须向密钥认证中心请求认证,认证之后才能够正确地连接到目的主机上。
很显然,第一种方式比较容易实现,但是客户机关于密钥的维护却是个麻烦事,因为每次变更都必须在客户机上有所体现;第二种方式比较完美地解决管理维护问题,然而这样的模式对认证中心的要求很高,在互联网络上要实现这样的集中认证,单单是权威机构的确定就是个大麻烦,有谁能够什么都能说了算呢?
但是从长远的发展来看,在企业应用和商业应用领域,采用中心认证的方案是必要的。
另外,ssh协议框架中还允许对主机密钥的一个折中处理,那就是首次访问免认证。
首次访问免认证是指,在某客户机第一次访问主机时,主机不检查主机密钥,而向该客户都发放一个公开密钥的拷贝,这样在以后的访问中则必须使用该密钥,否则会被认为非法而拒绝其访问。
4、字符集和数据类型
ssh协议为了很好地支持全世界范围的扩展应用,在字符集和信息本地化方面作了灵活的处理。
首先,ssh协议规定,其内部算法标识、协议名字等必须采用us-ascii字符集,因为这(ssh是安全协议吗)些信息将被协议本身直接处理,而且不会用来作为用户的显示信息。
其次,ssh协议指定了通常情况下的统一字符集为iso10646标准下的utF-8格式,详细请参考RFc-2279。
另外,对于信息本地化的应用,协议规定了必须使用一个专门的域来记录语言标记(languagetag)。
对于大多数用来显示给用户的信息,使用什么样的字符集主要取决于用户的终端系统,也就是终端程序及其操作系统环境,因而对此ssh协议框架中没有作硬性规定,而由具体实现协议的程序来自由掌握。
除了在字符、编码方面的灵活操作外,ssh协议框架中还对数据类型作了规定,提供了七种方便实用的种类,包括字节类型、布尔类型、无符号的32位整数类型、无符号的64位整数类型、字符串类型、多精度整数类型以及名字表类型。
下面分别解释说明之:
(1)字节类型(byte)
一个字节(byte)代表一个任意的8字位值(octet)[RFc-1700]。
有时候固定长度的数据就用一个字节数组来表示,写成byte[n]的形式,其中n是数组中的字节数量。
(2)布尔类型(boolean)
一个布尔值(boolean)占用一个字节的存储空间。
数值0表示“假”(False),数值1表示“真”(tRue)。
所有非零的数值必须被解释成“真”,但在实际应用程序中是不能给布尔值存储0和1意外的数值。
(3)无符号的32位整数类型(unit32)
一个32字位的无符号整型数值,由按照降序存储的四个字节构成(降序即网络字节序,高位在前,低位在后)。
例如,有一个数值为63828921,它的十六进制表示为0x03cdF3b9,在实际存储时就是03cdF3b9,具体存储结构的地址分配如图3。
图3无符号32位整数类型的典型存储格式
(4)无符号的64位整数类型(unit64)
一个64字位的无符号整型数值,由按照降序存储的八个字节构成,其具体存储结构与32位整数类似,可以比照图3。
(5)字符串类型(string)
字符串类型就是任意长度的二进制序列。
字符串中可以包含任意的二进制数据,包括空字符(null)和8位字符。
字符串的前四个字节是一个unit32数值,表示该字符串的长度(也就是随后有多少个字节),unit32之后的零个或者多个字节的数据就是字符串的值。
字符串类型不需要用空字符来表示结束。
字符串也被用来存储文本数据。
这种情况下,内部名字使用us-ascii字符,可能对用户显示的文本信息则使用iso-10646utF-8编码。
一般情况字符串中不应当存储表示结束的空字符(null)。
在图4中举例说明字符串“myabc”的存储结构:
图4字符串类型的典型存储格式
从图4中可以很明显地看出,字符串类型所占用的长度为4个字节加上实际的字符个数(字节数),即使没有任何字符的字符串也要占用四个字节。
这种结构与pascal语言中的字
符串存储方式类似。
(6)多精度整数类型(mpint)
多精度的整数类型实际上是一个字符串,其数据部分采用二进制补码格式的整数,数据部分每个字节8位,高位在前,低位在后。
如果是负数,其数据部分的第一字节最高位为1。
如果恰巧一个正数的最高位是1时,它的数据部分必须加一个字节0x00作为前导。
需要注意的是,额外的前导字节如果数值为0或者255时就不能被包括在整数数值内。
数值0则必须被存储成一个长度为零的字符串(string)。
多精度整数在具体运算时还是要遵循正常的整数运算法则的。
其存储格式通过图5的若干示例来说明:
图5多精度整数类型的典型存储格式
(7)名字表类型(name-list)
名字表(name-list)是一个由一系列以逗号分隔的名字组成的字符串(string)。
在存储方式上与字符串一样,名字表前四个字节是一个unit32型整数以表示其长度(随后的字节数目,类似于字符串类型),其后跟随着由逗号分隔开的一系列名字,可以是0个或者多