Linux系统管理员都清楚“安全外壳”协议是软件工具包中最便利也是最关键的工具之一。本文将向大家介绍一个被称作OpenSSH的开源SSH是如何工作的,以及它对于Linux系统环境的重要意义。
SSH可以通过网络管理外壳或Perl脚本安全快速实现一次性自动管理多台服务器。当然,其他网络外壳工具例如RSH,出现的时间比SSH更久。但SSH为了文件在网络上安全传输,加入了强大的加密和数据压缩功能,大部分流行的SSH甚至还提供了SFTP和SCP功能。在众多SSH中,最流行的就是由OpenBSD社团主持开发和维护的OpenSSH项目。OpenSSH可以用在目前几乎所有的操作系统平台上,包括微软Windows。
SSH的作用
SSH通过强大的加密功能保护完整的远程外壳线程不被黑客和恶意软件入侵。端到端的保护能力可以从线程开始到结束提供完整的保护,虽然受信主机认证方案以及系统间的预先密钥交换有助于提高安全性,但是OpenSSH并不需要证书或者预先密钥交换来确立一个加密的远程线程。
另外,SSH可以通过SFTP功能使得类似FTP的文件传输线程具有加密能力,同时可以让用户的密码以及用户名以加密方式传输,而非明文方式传输。对于限制更多的情况,如单一文件传输操作,SCP同样可以实现安全和方便的传输能力,它会通过一个加密的文件拷贝命令实现文件在网络上的传输。
使用和配置Linux客户端
将OpenSSH安装到主流Linux系统中非常简单,只需要一个简单的包管理命令。比如要在Debian GNU/Linux中安装OpenSSH,只需要以root身份登录,并在命令行方式输入apt-get install ssh。同样,在Fedora Core Linux中,也只需要以root身份登录,并输入yum install ssh即可。不过一般情况下,这两个命令行也不需要,因为Debian和Fedora Core中,已经默认安装了OpenSSH。对于任何Linux系统,如果你想查看它是否安装了OpenSSH,只需要简单地输入ssh即可。回车后,如果系统已经安装了OpenSSH,则会返回有关OpenSSH的完整使用信息。
要使用OpenSSH客户端通过命令行方式接入运行OpenSSH服务器端的系统,一般只需要输入ssh host,这里的host是指目标系统的主机名。如果网络没有DNS解析,或者主机名没有在/etc/hosts文件中列出,那么则需要直接输入对方主机的IP地址,比如ssh 192.168.0.1。
OpenSSH系统范围的配置文件一般位于/etc/ssh目录下。OpenSSH客户端的主要配置文件为/etc/ssh/ssh_config 。大部分版本的OpenSSH都在配置文件中带有详细的注释。在一些发行量较大的Linux系统中,比如Debian,你可以通过命令行man ssh_config来获取更多有关OpenSSH客户端的配置信息。
安全方面的一个主要配置项目就是ForwardX11,将这个选项设置为“no”,可以防止OpenSSH客户端自动向网络发送X Window System信息,否则就算没有在SSH链接上使用X Windows,有关信息还是有可能被发送。在这个选项中,你可以通过-X命令行参数来指定某个特定的SSH连接可以发送X Window系统信息。etc/ssh/ssh_config文件中的其它配置可以帮助你实现或者加强网络安全策略,满足某些特定的安全需求。
基于Windows的SSH客户端
Windows系统下的SSH客户端相当多,其中某些属于商业化软件,其余则是免费软件或共享软件,当然也有OpenSSH这样的开放源代码软件。虽然其中有些软件属于Unix模拟器外壳的一部分,仍然是命令行方式的客户端,但是大部分都已经配合Windows系统开发出了图形界面。在这些带有图形界面的免费软件中,WinSCP支持SCP 和 SFTP,PuTTY支持SSH 外壳。在看过上面有关Linux下OpenSSH客户端的使用方法后,你会发现带有图形界面的WinSCP和PuTTY在配置和使用上都方便易懂了许多。Windows下的OpenSSH,也被称作OpenSSH for Windows ,同样支持端口设定。
在Linux下使用和配置OpenSSH服务器
一般情况下,你的Linux系统上可能已经运行了OpenSSH服务器端。在Debian GNU/Linux 系统中,OpenSSH服务器端可以通过以下命令行方式重新启动: /etc/init.d/ssh restart。将命令行中的“restart” 改为 “start” 或 “stop”,就可以实现启动和停止OpenSSH服务器了。在Fedora Core Linux系统中,命令方式也是一样,只不过是将上面的“ssh”改为了“sshd”。
与OpenSSH客户端配置文件类似,OpenSSH服务器端的配置文件一般为/etc/ssh/sshd_config,它的格式与/etc/ssh/ssh_config基本一样,但是其中的选项是不同的,配置文件的细节可以通过man sshd_config命令查看。一般情况下,应该将UsePrivilegeSeparation和IgnoreRhosts选项设置为“yes”,将PermitRootLogin和PermitEmptyPasswords设置为“no”。与在OpenSSH客户端一样,如果允许在SSH连接上发送Windows系统信息,将导致轻微的安全风险,因此如果没有必要,不必激活该选项。同样,在服务器端也应该将X11Forwarding设置为“no”。
对于具备安全意识的Linux用户,更应该正确设置以上几个OpenSSH服务器端选项。常见的例外可能包括PermitRootLogin和X11Forwarding配置选项。
使用OpenSSH
OpenSSH带有多项SSH所不具备的功能,例如,其它网络协议可以在OpenSSH协议中建立“通道”,从而提供增强的安全性,如本文中提到的在SSH连接上使用Window System;ssh-agent等工具可以让OpenSSH客户端的管理和使用变得更简单;另外一些不相关的工具也可以支持SSH通道,例如Subversion版本控制系统。
使用网络上多台计算机的Linux新用户也许无法马上体会到SSH的价值,这些新用户以前大部分都是微软Windows系统的用户。在Windows系统中,有关系统的设置是针对本地用户进行优化的,因此远程进行管理并不方便。就算是在服务器管理以及远程技术支持方面,通过诸如Windows Remote Desktop以及Terminal Services for Windows等工具所实现的管理功能也是有限的,而且通过网络访问Windows资源总是不太直接。
相反,Linux长期用户会在一个单独的系统上安装日常工作所需的应用软件,他们通过一个硬件配置较低的系统,通过SSH连接到这个单独的系统上并运行软件。实际上,很多Linux系统管理员会整天坐在电脑前工作,而他们所进行的操作,例如收发电子邮件,书写工作日志或者编程等工作所使用的电脑甚至不在同一栋大楼内。在逐渐深入了解SSH的优点之后,用户使用SSH就会更加地得心应手,并且更信任SSH。而那些刚刚熟悉Linux系统的用户,短时间内还不能很快理解SSH为工作效率带来的提升。
配置和使用OpenSSH是一件对未来工作效率提升非常有帮助工作,尽管目前可能还无法立即看到收益。假以时日,你将会怀疑如果没有SSH还能否正常工作。
通过在工作站的Windows环境运行多终端模拟器,或者通过Screen工具,Linux或其它Unix系统管理员都可以轻松地同时管理多个系统。SSH可以通过网络管理外壳或Perl脚本安全快速实现一次性自动管理多台服务器。