安装步骤
在 Solaris 10 操作系统上部署 SSH 服务,初看可能稍显繁琐,但掌握关键环节后,整个过程并不复杂。下面我们将逐步拆解,确保你能顺利完成配置。
先说明几个核心要点:整个流程可分为获取安装包、安装软件包、配置安全环境以及启动守护进程等几个阶段。每个阶段都需要细致操作,尤其注意权限和路径的正确设置,稍有疏忽可能导致服务无法正常启动。
第一步:获取安装包
首先,需要下载所需的安装包。SUN 的自由软件站点(ftp://ftp.sunfreeware.com/pub/freeware/sparc/10)提供了所有必需组件,无需手动编译,省去不少麻烦。对于 SPARC 架构的系统,请下载以下文件:
openssh-4.3p1-sol10-sparc-local.gz
openssh-4.3p2-sol10-sparc-local.gz
openssl-0.9.8a-sol10-sparc-local.gz
tcp_wrappers-7.6-sol10-sparc-local.gz(可选,但建议安装)
zlib-1.2.3-sol10-sparc-local.gz
libgcc-3.3-sol10-sparc-local.gz
perl-5.6.1-sol8-sparc-local.gz(可选)
prngd-0.9.25-sol10-sparc-local.gz(可选)
egd-0.8-sol8-sparc-local.gz(可选)
若系统中已安装部分包,可以跳过。但稳妥起见,建议尽可能获取最新版本。若是 Intel 平台,只需将文件名中的“sparc”替换为“intel”即可。
第二步:安装软件包
下载完成后,进入下载目录,依次执行解压命令。以 SPARC 系统为例:
# gunzip openssh-4.3p1-sol10-sparc-local.gz
# gunzip openssh-4.3p2-sol10-sparc-local.gz
# gunzip openssl-0.9.8a-sol10-sparc-local.gz
# gunzip zlib-1.2.3-sol10-sparc-local.gz
# gunzip libgcc-3.3-sol10-sparc-local.gz(若尚未安装 gcc 3.3)
# gunzip tcp_wrappers-7.6-sol10-sparc-local.gz(可选)
其他可选包同理。接着以 root 身份运行安装指令:
# pkgadd -d openssh-4.3p1-sol10-sparc-local
# pkgadd -d openssh-4.3p2-sol10-sparc-local
# pkgadd -d openssl-0.9.8a-sol10-sparc-local
# pkgadd -d zlib-1.2.3-sol10-sparc-local
# pkgadd -d libgcc-3.3-sol10-sparc-local(若尚未安装 gcc 3.3)
# pkgadd -d tcp_wrappers-7.6-sol10-sparc-local(可选)
安装过程中遇到交互提示,均输入“y”即可。
安装完成后,/usr/local 目录下会生成多个子目录。SSL 文件的默认路径为 /usr/local/ssl。需要注意的是,编译时并未将 /usr/local/lib 和 /usr/local/ssl/lib 加入 LD_LIBRARY_PATH 环境变量,因此可能需要手动添加。之后,可在 /usr/local/bin 中找到 ssh 可执行文件,在 /usr/local/sbin 中找到 sshd。务必确认 /usr/local/bin 和 /usr/local/sbin 已经添加到 PATH 环境变量中。
此外,可选包中的 Perl 脚本(.pl 文件)默认会在 /usr/local/bin 中寻找 Perl 解释器。如果使用系统自带的 Sun Perl,需要将脚本开头的路径改为 /usr/bin;如果使用安装包提供的 Perl,则保持 /usr/local/bin 不变。
第三步:建立 sshd 用户和 /var/empty 目录
OpenSSH 4.3p1 引入了一种新的安全机制——特权分离(privsep),具体原理可参考 openssh 源码目录下的 README.privsep 文件。该机制默认启用,因此在启动 sshd 之前,必须以 root 身份完成以下操作:
# mkdir /var/empty
# chown root:sys /var/empty
# chmod 755 /var/empty
# groupadd sshd
# useradd -g sshd -c 'sshd privsep' -d /var/empty -s /bin/false sshd
关键点:/var/empty 目录必须保持为空。若跳过此步骤,启动 sshd 时会报错,守护进程无法正常运行。
第四步:配置 tcp_wrappers
tcp_wrappers 是一款访问控制工具,用于限制哪些机器可以访问 sshd 使用的 22 端口。如果已在用 tcp_wrappers,只需确认 /etc/hosts.allow 和 /etc/hosts.deny 文件中包含 sshd 条目即可。若尚未启用,需要先创建这两个文件:
首先,创建 /etc/hosts.deny,加入一行:
sshd:ALL
然后,创建 /etc/hosts.allow,填入允许访问的 IP 列表。例如:
sshd:10.71.62.
此例允许来自 10.71.62.0 子网的所有机器进行连接。
第五步:安装并启动 ssh 和 sshd
最后一步,在需要运行 sshd 的服务器上生成密钥。同样要确保 /usr/local/bin 和 /usr/local/sbin 已在 PATH 中。注意:如果之前运行过 sshd 且 /usr/local/etc 下已有密钥,以下命令会覆盖它们。以 root 身份执行:
# ssh-keygen -t rsa1 -f /usr/local/etc/ssh_host_key -N ""
# ssh-keygen -t dsa -f /usr/local/etc/ssh_host_dsa_key -N ""
# ssh-keygen -t rsa -f /usr/local/etc/ssh_host_rsa_key -N ""
每条命令可能需要几分钟,取决于机器性能。完成后,在远端主机上也执行相同命令,创建公钥和私钥。若希望远端服务器能访问本机,需要将本机的公钥通过 FTP 等方式传递到远端主机的 /usr/local/etc 目录下,具体文件包括:
/usr/local/etc/ssh_host_key.pub
/usr/local/etc/ssh_host_dsa_key.pub
/usr/local/etc/ssh_host_rsa_key.pub
为方便管理,可以创建一个启动脚本放在 /etc/init.d 目录下(root 权限):
#!/bin/sh
pid=`/usr/bin/ps -e | /usr/bin/grep sshd | /usr/bin/sed -e 's/^ *//' -e 's/ .*//'`
case $1 in
'start')
/usr/local/sbin/sshd;;
'stop')
if [ "${pid}" != "" ]
then
/usr/bin/kill ${pid}
fi;;
*)
echo "usage: /etc/init.d/sshd {start|stop}";;
esac
随后设置权限并创建软链接:
# chown root /etc/init.d/sshd
# chgrp sys /etc/init.d/sshd
# chmod 555 /etc/init.d/sshd
# ln -s /etc/init.d/sshd /etc/rc2.d/S98sshd
之后,可以通过以下命令手工启动或停止进程:
# /etc/rc2.d/S98sshd start
# /etc/rc2.d/S98sshd stop
使用 # ps -e | grep sshd 可以确认 sshd 是否已启动。
至此,SSH 安装完毕。可从远端主机通过以下命令访问:
# ssh root@N2000Secondary
或使用 IP 地址:
# ssh root@10.71.62.115
若使用主机名,需要在 /etc/hosts 中配置双方的 IP 地址和主机名对应关系。
扩展:如何实现无密码访问
若希望省去每次输入密码的麻烦,可通过密钥认证实现免密登录。具体步骤如下(local 代表当前主机,remote 代表远端主机):
在 local 服务器上:
local> ssh-keygen -t dsa -f .ssh/id_dsa
local> cd .ssh
local> scp id_dsa.pub user@remote:/.ssh/id_dsa.pub
local> ssh user@remote
在 remote 服务器上:
remote> cd .ssh
remote> cat id_dsa.pub >> authorized_keys2
remote> chmod 640 authorized_keys2
remote> rm id_dsa.pub
remote> exit
然后,修改 /usr/local/etc/sshd_config 文件,找到“PasswordAuthentication yes”这一行,去掉注释并将 yes 改为 no。重启 sshd 进程后,即可直接访问:
# root@N2000Primary # ssh N2000Secondary iostat -E|grep Size
Size: 73.40GB <73400057856 bytes>
Size: 73.40GB <73400057856 bytes>
Size: 73.40GB <73400057856 bytes>
Size: 0.49GB <486584320 bytes>
Size: 73.40GB <73400057856 bytes>
对比一下,如果在本地直接执行 iostat -E|grep Size:
# root@N2000Primary # iostat -E|grep Size
Size: 73.40GB <73400057856 bytes>
Size: 73.40GB <73400057856 bytes>
Size: 73.40GB <73400057856 bytes>
Size: 0.00GB <0 bytes>
Size: 73.40GB <73400057856 bytes>
可以看到,通过 SSH 远程执行命令所获得的结果完全一致。这意味着配置成功,可以高效地管理远程服务器了。
