使用OpenSSH在Linux上实现安全网络通道

日期: 2010-01-25 作者:Ronald McCarty翻译:刘波 来源:TechTarget中国 英文

Secure Shell(SSH)的开发是为了克服早期的远程访问程序,如Telnet和rlogin的安全问题。这些程序有若干安全漏洞,包括发送明文口令;对负载未进行加密,导致用户数据泄露;缺乏可支持先进安全方法的模块,比如说双因子认证,对公钥的支持,以及对除了远程访问协议以外的协议的支持。   SSH在Linux上得到了实现,大多数的Unix版本都使用OpenSSH,这个产品受到OpenBSD项目的支持。除了SSH,OpenBSD还提供了使用SSH的安全拷贝(secure copy SCP)以及安全文件传输协议(secure file transfer protocol SFTP)的程序,可以……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

Secure Shell(SSH)的开发是为了克服早期的远程访问程序,如Telnet和rlogin的安全问题。这些程序有若干安全漏洞,包括发送明文口令;对负载未进行加密,导致用户数据泄露;缺乏可支持先进安全方法的模块,比如说双因子认证,对公钥的支持,以及对除了远程访问协议以外的协议的支持。

  SSH在Linux上得到了实现,大多数的Unix版本都使用OpenSSH,这个产品受到OpenBSD项目的支持。除了SSH,OpenBSD还提供了使用SSH的安全拷贝(secure copy SCP)以及安全文件传输协议(secure file transfer protocol SFTP)的程序,可以让用户简单地去将数据拷贝到系统中。

  SSH是很安全的,甚至可以在不安全的私有和公共因特网上使用。比如说,可以使用SSH,通过一个租用的T1线路或者在私有连接不可用的情况下,通过公共的因特网连接到远程合作伙伴的Unix系统。

  在本文中,我会介绍SSH的基本用途,以及通过SSH会话进行通道通信的更高级的话题。

  SSH的执行

  SSH的简单形式可以被用于远程连接一个系统。最基本地,程序可以开启一个会话,让用户登陆并提供一个在/etc/passwd中指定的Shell。

  要开启一个远程shell,可以简单地通过远程服务器的名字或者IP地址来执行SSH:

  ~$ SSH 192.168.1.3

  如果用户之前没有开启过到主机的会话,那么会显示一个警告,提示远程主机未知:

The authenticity of host '192.168.1.3 (192.168.1.3)' can't be established.
RSA key fingerprint is d2:af:9e:c7:52:97:d2:55:e8:3e:83:a4:eb:98:a1:b6.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.3' (RSA) to the list of known hosts.

  如果警告提示密钥不匹配,那么您就需要去确定是否密钥已经失密了,或者是否远程主机进行了一些不得不改变密钥的活动(如安装了新的操作系统,移除或者重新产生了密钥)。一旦会话被建立,用户就可以像是在本地通过一个shell账号使用系统一样,将所需的正常程序在远程主机上进行执行。

  默认情况下,SSH将本地用户的账号名传递到远程主机。但是,如果用户的ID和本地用户ID不匹配的话,可以在SSH命令中使用-1参数:

  SSH -l rmccarty 192.168.1.3

  SSH通道

  SSH提供了一个强大的功能-通道,不仅可以对远程登录中的交互信息进行加密,可以让其他的信息通过通道进行发送。信息会直接发送到远程服务器或者远程网络上的其它设备。

  从本地到远程的SSH通道:一个基本的例子是,当远程用户在对一个中心站点有SSH访问的同时,也需要在远程站点安全地访问内部网Web服务器时,可以将内部网放到互联网中,来实现这种访问需求,但这种方法是不安全的。一个更安全的解决方案,是在主机上使用SSH,通过远程SSH网关,将访问重定向到Web服务器。

  假设远程的SSH服务器是192.168.1.3,并且远程的web服务器是192.168.1.4,在端口80上运行。那么可以通过以下方法建立一个SSH通道:

  SSH -L 80:192.168.1.4:80 192.168.1.3

  -L告诉本地SSH客户端,通过192.168.1.3上的SSH网关,将本地主机上的80端口(参数中的第一个80)与远程主机192.168.1.4 (Web服务器)上的80端口进行绑定。这样,用户就可以在本地系统上使用http://localhost:80打开一个浏览器,并看到远程Web服务器所提供的网站内容。(如果需要,您也可以使用本地系统的IP地址来代替localhost)。

  80端口是一个特权端口( 即小于1024的端口),并由root用户进行控制。所以通常需要建立一个更高数值的本地端口,比如在相同的例子里使用8080:

  SSH -L 8080:192.168.1.4:80 192.168.1.3

  现在,用户可以使用http://localhost:8080连接到远程Web站点并正确的连接到Web服务器的80端口。通过提供从本地到远程的通信通道,SSH提供了一种访问远程服务的简单方法。这个解决方案是一个很理想的情况,即一个远程站点发起了会话,并需要访问远程资源。但当远程站点需要建立一个连接,并通过会话提供对本地服务的访问时,这个解决方案就不可用了。这个从远程到本地的通道可以通过使用-R参数来达到和从本地到远程相似的效果。

  从远程到本地的SSH通道:在这个例子中,我们假设本地的站点需要剔除一个批处理进程,然后在一定时间内提供FTP服务,以便远程站点可以从本地站点下载文件。请记住,对于端口适用同样的规则:root用户会使用数值小于1024的端口。

  通道可以通过以下命令来发起:

  SSH -R 23:192.168.1.3:23 192.168.1.3

  这意味着,远程SSH网关会在自己的23端口开启一个套接字(通过参数192.168.1.3:23),并将该端口上接收到的任何信息通过通道回送到23端口。一旦通道被建立,远程站点上的用户可以就像192.168.1.3在运行一个FTP服务器一样,使用ftp连到该机器。

  优化通过SSH通道的通信

  SSH提供了多个有用的参数,用于优化通过通道的通信。这些参数无论是在通过互联网或者私有网络时,都是很有用的。

  压缩:通过实时的压缩信息,SSH可以让事务更快地得到完成。一般来说,压缩可以加速交互式通信,如通过通道运行一个shell命令,以及那些适合于压缩的数据(例如,含有大量文本的文档)。但是,压缩是有开销的,而且经常会使,不使用高速线路而采用压缩所带来的好处所剩无几。开启压缩的参数是-C。

  非交互的:如果一个远程登录在一个加密会话中不再需要了,那么可以对远程命令进行禁用。这对于简单的端口定向或者批处理来说是很有用的。对于交互,不执行远程shell的参数是-N。

  SSH也提供了一些命令,允许对基本的文件交互,可以通过安全的通道来进行直接的交互。对比于执行SSH通道以及其它的命令(如FTP)将文件传输过一个线路,这使得能利用一个单独的命令来对批传输进行优化。可以使用SCP和SFTP来代替原始的操作系统命令RCP和FTP。

  在您的Linux网络上利用SSH的优势

  SSH提供了一种在私有和公共网络之间加密数据的安全方法。SSH避免了早期实现中不对密码进行加密以及公开发送数据的缺点。除了这些基本的安全功能外,SSH还提供了安全通道。请试试这些例子,并将SSH添加到您的安全计算工具包中。

相关推荐