转载请注明出处。
本文展示普通用户编译 OpenSSH-6.6p1 的过程,只有编译而没有安装,编译后可正常使用,因此所有的操作均以普通用户的权限执行。
总的来说,OpenSSH 的编译至少需要另外两个包:zlib 和 OpenSSL。前者是一个开源、通用的数据压缩库;而后者,呵呵,就是那个大名鼎鼎的 SSL 和 TLS 协议的开源工具包。这两个包可以自己编译,也可以在系统上安装。本文介绍的自然是编译的方法,原因已表。
除了上面提到两个包以外,有的时候还需要更多,比如选择“–with-pam”选项就需要 Linux-PAM 包,而 Linux-PAM 又依赖于 flex 等等。因此如果这些包都一个个自己编译的话,实在是吃力又未必讨好。而经鄙人尝试,编译后的 Linux-PAM 似乎只有安装在系统中才能被 OpenSSH 的配置文件识别。几经波折,未能如愿,无奈作罢。
言归正传,下面开始分步骤说重点。
- 下载软件包
- 编译 zlib
从各自官网下载上述软件包,一般最新的稳定版本就可以,比如鄙人用的就是 zlib-1.2.8,openssl-1.0.1f,openssh-6.6p1。分别可以在zlib,openssl 和 openssh 找到。
以备需要,多说一句。鄙人所用操作系统环境:Linux 2.6.18.el5 #1 SMP Wed Jan 21 10:41:14 EST 2009 x86_64 GNU/Linux。
软件包一般是先配置(一般是 ./config 或 ./configure)再编译(make),配置时可以根据需要选择不同选项,一般可以用“-h”选项查看帮助。而这里 zlib 的编译简单得有点让人不好意思(当然,执行下述步骤前需要首先解压缩包文件):
$./configure $make
openssl 的编译同样简单:
$./config $make
完成了上面两个步骤,接下来就是 openssh 的编译了。与前两者稍有不同,openssh 在配置阶段需要调整一些选项(这些也都是通过 ./configure -h 学习到的):
$./configure --with-zlib=/home/linhan/compile/zlib-1.2.8/ --with-ssl-dir=/home/linhan/compile/openssl-1.0.1f/ $make
这里的“/home/linhan/compile/zlib-1.2.8/”和“/home/linhan/compile/openssl-1.0.1f/”是鄙人前面编译 zlib 和 openssl 的路径,照猫画虎即可。
在配置的选项里,比较重要的还有两个。一个是上面提到的“–with-pam”,在这里没有用到,因此 sshd 启动后远程计算机需要通过密钥验证的方式才能登录,详见鄙人之前写的 普通用户运行sshd。另一个选项是“–with-tcp-wrappers”,打开该选项后,就能根据“/etc/hosts.allow”和“/etc/hosts.deny”中的内容对远程主机的地址进行过滤,而不打开此选项则可以绕过该过滤机制(什么,某人的服务器限制了登录地址?那么……)。
好了,到此为止,编译工作已经顺利完成,接下来就可以启动 sshd 进程监听特定端口了。至于方法,普通用户运行sshd里讲到了。