我们从调整 SSH 服务器配置文件 /etc/ssh/sshd_config(带有相应的注释)着手:
Protocol 2 # 2 only, 1 is insecure
PermitRootLogin no # Always set this explicitly for safety
X11Forwarding no # Generally a good choice for servers
根据您个人的喜好程度和/或操作环境,可能还得考虑使用 AllowUsers 选项来指定用户和(可选)主机地址:
AllowUsers bilbrey@111.222.333.444 tom@* cvsd@*
如果您配置了这项功能,那么在注销前先对它进行测试,因为不恰当的配置会将您锁在系统之外。我们允许作者以管理员用户身份进入,同时允许 cvsd 用户从任何位置进入。确保您在这里添加了所有被允许的 user@host 组合。在修改了 OpenSSH 配置之后,重新启动 SSH 服务器:
[root@kronk ssh]# /etc/init.d/sshd restart
>
回页首
用户通过 SSH 访问计算机
由于我们安装的目的是向远程用户提供仅针对 CVS 功能的受限且安全的访问,因此给每个用户一个 shell 帐户,让他们能够使用 SSH 连接到本地机器,从而能够安全地对 CVS 服务器进行远程访问,这样做并没多大意义。如果我们那么做,那么当然就不用费劲去设置 chroot 环境。相反,让我们使用刚才配置的 cvsd 用户。虽然该用户没有 shell(记得 adduser 命令中的 /bin/false 吗?),但我们仍然可以给予 cvsd 一个密码,并允许建立 SSH 连接以设置隧道。
在为 cvsd 设置了密码以后(passwd username),转至另一个系统,在 X 下打开两个终端窗口。在第一个窗口中,建立一个到安装了 CVS 的服务器的 SSH 隧道:
$ ssh -L 2401:localhost:2401 -l cvsd -N kronk
cvsd@kronk's password:
$ cvs -d :pserver:anonymous@localhost:/coolsoftware checkout .
cvs server: Updating .
cvs server: Updating CVSROOT
U CVSROOT/checkoutlist
...
以上命令的输出与我们前面在 CVS 系统上测试的输出相同,这意味着 CVS 功能正常。要了解对 SSH 隧道背后原理的说明,请参阅下一页。
回页首
SSH 隧道:简要概述
SSH 隧道也称为端口转发,它让许多人绞尽了脑汁。在概念上它很简单,但想用几百个字解释它却很难。以下从较高层面简要概述了这一过程。要了解 SSH 隧道是如何实现以及其中的原理,请参考本教程末尾的参考资料。
客户机程序(例如,CVS)通过在两个系统间建立 TCP 连接与服务器端的服务或应用程序(例如,cvsd)进行通信。该 TCP 连接由两部分组成:目的机器的 IP 地址和服务的“侦听”端口。IP 地址和端口的组合称为套接字。在缺省情况下,SSH 侦听端口 22。CVS 在缺省情况下侦听端口 2401。但正如以前讨论过的那样,CVS 在本质上属于不安全的协议 — 数据和认证都用明文传输,在传输期间可以轻易地被“嗅探”或拦截。而且,我们的 CVS 安装位于防火墙后的服务器上,该防火墙被配置成只允许三种协议通过:SSH(端口 22)、HTTP(端口 80)和 HTTPS(端口 443)。
为了保证 CVS 客户机和服务器之间通信的安全,我们让所有通信都可以以隧道方式通过 SSH 服务。这样做达到了两个目的。第一,对所有传输进行了完全加密。第二,隧道在防火墙上开了一个“洞”,允许客户机访问防火墙另一端的服务器。但它到底是怎么工作的呢?第一步是在客户机和主机之间建立隧道:
$ ssh -L 2401:localhost:2401 -l cvsd -N kronk
上面的命令可以如下进行分解:ssh -L
在建立连接后,会提示您给出用户 cvsd 的密码。隧道会始终打开,直至连接关闭。这就是在与 CVS 服务器通信时需要两个终端窗口的原因了 — 一个用于建立隧道,一个用于在终端窗口内运行 CVS 客户机。当然,这里假定您在 Linux/UNIX 系统上进行工作。如果某个或某几个用户不熟悉 Linux,而选择使用另一种操作系统(如 Windows),那会怎样呢?正如在下一页中所说明的那样,我们几乎遵循与上面完全相同的过程,只不过做少量调整。
coov 于 2011-03-09 21:35:53发表:
顺路学习