老Linux管理员们都知道SSH(安全shell协议),这是他们软件工具箱中最便利最有用的工具。在工作站X Windows环境下使用多端竞争或者通过Screen utility,Linux服务器管理员或者其它基于Unix操作系统的服务器管理员,能轻松地同时管理几个系统。网络管理shell或者Perl脚本,能利用SSH在多个服务器上简单安全地自动执行工作。
网络shell效应RSH比SSh要长。但是SSH在其功能中添加了强大的加密功能和数据压缩功能,并且大多数现代SSH实现在同一包内提供SFTP和SCP,它们用于网络中的安全文件传输。
最流行最普遍的SSH实现以OpenSSH的形式出现,它是由OpenBSD社团构思和维护的项目。OpenSSH被导入每一个操作系统平台,包括微软的Windows,虽然在Window环境中它最广泛的应用是:做为基于Unix系统上的OpenSSH服务器的客户端。这些基于Unix系统包括:Linux、Solaris和OpenBSD。
SSH的职责
SSH 使用强大的加密功能保护远程会议不被怀有恶意的黑客攻击。从始至终都提供端到端的安全保障,包括客户机与主机进行联系,以及在电脑之间传输用户名和口令之前建立会议专用的密码键交换。它可以使用多种不同的密码方案:AES、3DES、Blowfish以及其它方案。受信任的主机鉴定方案和系统之间键值交换提高安全性,OpenSSH不需要安全证书或优先键交换即可创建安全加密的远程会议。
另外,使用SSH可以解决某些类型的网络拥塞,明显加速网络,因为它在传输数据前先对数据进行了压缩。它通过SFTP加密,能提供类似于FTP的交互式文件传输能力,所以,甚至口令和用户名在网络上传输都没有阻碍。对于文件传输操作,SCP也类似地提供安全而方便的途径完成此项工作——加密的文件拷贝命令,此命令操作网络连接,它是SSH实现的一部份。
SSH是加密交流中众所周知的网络协议。开发它是为了取代RSH效用,RSH也加了密,但是不够安全。SSH不仅继承了RSH的功能,而且扩展加强了其功能,特别是安全性方面。
Linux的OpenSSH
Linux上安装OpenSSH是很容易的。例如,在Debian GNU/Linux系统上,安装OpenSSH时,做为根用户登录,然后输入命令apt-get install ssh即可。类似地,在Fedora Core Linux系统上,安装OpenSSH时,做为根用户登录,然后输入命令yum install ssh即可。你甚至不需要做这些事情,因为在Debian 和Fedora Core中,它们默认安装配置中已经包含了OpenSSH。对于Linux系统来说,如果要确定系统是是否已经安装了OoenSSH,只需要输入命令: ssh。如果系统中安装了OpenSSH,则会给出简单的使用指南信息(Listing A):
Listing A
$ ssh
usage: ssh [-1246AaCfgkMNnqsTtVvXxY] [-b bind_address] [-c cipher_spec]
[-D port] [-e escape_char] [-F configfile]
[-iidentity_file] [-L [bind_address:]port:host:hostport]
[-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
[-R [bind_address:]port:host:hostport] [-S ctl_path]
[user@]hostname [command]
在OpenSSH说明书上有更完整的使用信息。这个说明书是传统UNIX文件手册系统的一部分,并且在命令行模式下输入man ssh命令,即可访问OpenSSH说明书。说明书提供了OpenSSH客户端命令行选项的信息,关联的配置文件信息、当前版本已知的Bug信息,影响其操作的shell环境变量信息,以及相关说明列表。正如列表所示,上面有sshd的说明书,有ssh-agent的说明书,以及OpenSSH工具集里其他应用的说明书。
配置并使用Linux 客户端
在OpenSSH客户端上,从命令行访问OpenSSH服务器上的其他系统时,仅仅只需要输入ssh host命令,这里“host”是目标系统的主机名。有时候这个主机名不能被解析成IP地址,因为你没有那个系统的DNS,并且它没有在本地系统的/etc/hosts文件中列出来。此时有必要指定目标系统的IP地址而不是主机名,例如:输入ssh 192.168.0.1命令,连接此IP表示的系统。更多的SSH命令如下:
SSH一般使用端口22。如果SSH服务器侦听一个不标准端口,使用下面命令,示例端口号为1234:
ssh -p 1234 host
除非指定了用户名,否则它将试图登录到一个远程系统,此时用户名与本地系统上的用户名相同。可以使用命令选项指定不同的用户名。下面给出了一般格式,“user”表示用户名。
ssh -l user host
一个更普遍的指定用户名的方法是使用下面的格式:
ssh user@host
通过SSH而不需要打开shell界面即可以在目标系统上执行命令。下面例子中的“command”表示想要执行的命令:
ssh host command
可以在目标系统上指定当前工作路径。在下面的示例中,指定了/home/user为当前工作路径:
ssh host:/home/user
可以将上面的多个选项组合到一块,形成更复杂的定制操作:
ssh -p 1234 user@host:/home/user
ssh -l user host command
OpenSSH配置文件位于路径/etc/ssh下。OpenSSH客户端主要的配置文件在/etc/ssh/ssh_config路径下,大多数版本都包含足够的解释信息,告诉你怎么使用配置文件。对于有广泛而复杂的说明书系统的版本,例如Debian,可以使用man ssh_config命令,获得足够多的OpenSSH客户端配置信息。
对于安全性而言,一个普遍而重要的配置选项是ForwardX11,它应该被设置成“NO”,从而阻止SSH客户端向网络自动发送X Windows系统信息,甚至在通过SSH连接而没有使用X Windows时,也是一样。使用这个设置,可以指定特定的SSH连接,通过使用- X命令选项,传送X Windows系统信息。在etc/ssh/ssh_config文件中其它配置选项也能执行和服从安全政策,并且可以服务于特殊的安全需要。
基于Windows的SSH客户端
微软的Window系统有很多SSH客户端程序,有些是私人的、商业的应用程序,有些是免费软件或共享软件,还有一些是开源软件,例如:OpenSSH。存在命令行客户端程序时,它们之中有些程序被安装成为类似UNIX shell的一部分,现在最常用SSH的图形用户界面程序。它们之中,WinSCP用于SCP和SFTP性能,PuTTY用于SSHshell性能。通过阅读上述的关于Linux的OpenSSH使用信息,则很容易了解WinSCP和PuTTY的用户界面和它们的配置。还可以获得称为OpenSSH for Windows微软Windows OpenSSH的实际端口。
配置并使用Linux服务器
一般地,OpenSSH服务器运行Liunx系统。它可以在Debian GNU/Linux系统中通过/etc/init.d/ssh命令进行重启。相似地,在启动和停止时,只需要将“restart”置换成“start”“stop”即可。Fedora Core Linux系统使用相同的命令格式,但是需要将/etc/init.d/ssh中的“ssh”置换成“sshd”。
与OpenSSH客户端配置文件相似,OpenSSH服务器配置可以通过/etc/ssh/sshd_config文件完成。它的格式与/etc/ssh/ssh_config非常相似,但是其选项有很多不同。配置细节可以通过输入man sshd_config命令查看。
一般将UsePrivilegeSeparation和IgnoreRhosts选项设置成“YES”,而将PermitRootLogin和PermitEmptyPasswords选项设置成“NO”。与OpenSSH客户端一样,使用SSH传输X Windows系统信息的风险非常低,如果没有必要,对任何系统它都应该是不活动的。这样,通常将X11Forwarding设置成“NO”。
在Linux上,它们通常有相当具有安全意识的人进行维护,这些配置选项应该进行恰当配置。一般应该包括PermitRootLogin和X11Forwarding配置选项。
使用OpenSSH
OpenSSH还有另外功能。例如:其他网络协议可以在OpenSSH协议上“打隧道”,从而提供更高的安全性,这已在本文中有所提示。ssh-agent工具可以简化OpenSSH客户端的管理和使用。还有一些不相关的工具,包括SSH隧道支持,例如:Subversion版本控制系统。它的潜能是无穷尽的,不可能找到它们的终点。
使用多台电脑的Linux新用户,可能不会一下子了解SSH的价值。他们都习惯于微软的Windows操作, Windows上的界面已经优化好了,在某种程度上,反而不易于进行远程管理。即算有服务器管理和远程技术支持,使用诸如Windows Remote Desktop和Terminal Services for Windows等远程管理工具,其有效性也相当有限,并且不鼓励通过网络直接使用Windows资源。
相反,Linux用户在单个系统上运行他们的日常程序,并且在电脑上经过简单安装就能通过SSH访问这些程序。很多 Linux管理员将坐在一台电脑前面,完成不在同一个地方的多台电脑上的工作,包括email、写作、编程,这不是一两个网络应用程序。对SSH的性能越熟悉,则其用处越大,同时也越信任它。但是从Windows中走出来的Linux用户还不能立即感受到SSH推动生产力的能力。
OpenSSH的配置和使用是值得学习的,即使你现在不能立即看出其作用,假以时日,你会离不开它的。
原文链接:http://www.zdnet.com.cn/developer/code/story/0,3800066897,39524195-2,00.htm