近期公司维护的一个项目中有部分内网中的服务器需要升级openssh(openssl)服务的软件,虽然openssh服务在一般生产环境中运用的功能不是很复杂,但是为了保证平滑升级还是有一些需要特别注意和谨慎操作的细节,下面就详细的分析一下吧。
查看当前的ssh服务版本
- # ssh –V
- OpenSSH_4.3p2, OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008
检测之前安装的包(openssl和openssh同时更新)
- # rpm -qa | grep openssl
- openssl-0.9.8e-12.el5_4.6
- # rpm -qa | grep openssh
- openssh-4.3p2-41.el5
- openssh-server-4.3p2-41.el5
- openssh-clients-4.3p2-41.el5
- openssh-askpass-4.3p2-41.el5
卸载openssh和openssl的rpm安装包
- #rpm -e `rpm -qa | grep openssh`
- #rpm -e `rpm -qa | grep openssl` --nodeps
此时会把所有关于ssh服务的配置文件自动删除,但会自动生成配置文件备份/etc/ssh/ssd_config.rpmsave
源码安装openssh、openssl,为了避免zlib库文件版本过低,同时编译安装zlib库
- # tar xzvf zlib-1.2.6.tar.gz
- # cd zlib-1.2.6
- # ./configure --prefix=/usr/local/zlib
- #make && make install
- # tar xzvf openssl-1.0.1.tar.gz
- # cd openssl-1.0.1
- #./config --prefix=/usr/local/openssl
- # make && make install
- #tar xzvf openssh-5.9p1.tar.gz
- #cd openssh-5.9p1
- #./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh --with-pam --with-ssl-dir=/usr/local/openssl --with-md5-passwords --mandir=/usr/share/man --with-zlib=/usr/local/zlib
- # make && make install
出现:configure: error: PAM headers not found 错误,需要安装pam-devel的rpm包
- # yum install –y pam-devel
- 修改相关配置文件
- # cp -p contrib/redhat/sshd.init /etc/init.d/sshd
- # chmod u+x /etc/init.d/sshd
- # chkconfig --add sshd
- #cp /usr/src/openssh5.9p1/sshd_config /etc/ssh/sshd_config
- # cp /usr/local/openssh/sbin/sshd /usr/sbin/sshd
- # service sshd start -----------断开连接!!!
- Starting sshd: [ OK ]
再次查看sshd服务的版本
- #ssh -V
- OpenSSH_5.9p1, OpenSSL 1.0.1 14 Mar 2012
至此升级成功!
由于原服务是用rpm包安装的,现需要通过指定版本的源码包升级,虽然先卸载ssh的rpm包后,进程依旧驻留在内存中,保持连接不断开,但万一在升级过程中由于网络、电源等原因意外中断,则无法再通过ssh服务远程登录服务器,同时为了防止在安装软件后的某些错误配置造成原连接断开后无法启动ssh服务而不能远程登录服务器,所以建议在一般生产环境中需要远程升级openssh服务时,先开始telnet服务。
- #yum install -y telnet
- #vim /etc/xinetd.d/telnet
- # default: on
- # description: The telnet server serves telnet sessions; it uses \
- # unencrypted username/password pairs for authentication.
- service telnet
- {
- flags = REUSE
- socket_type = stream
- wait = no
- user = root
- server = /usr/sbin/in.telnetd
- log_on_failure += USERID
- disable = no //默认为yes,修改disable = no
- # service xinetd restart
- Stopping xinetd: [ OK ]
- Starting xinetd: [ OK ]
查看telnet端口验证服务是否开启
- #netstat -tnlp | grep :23
- tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN 32450/xinetd
注意:为了安全,telnet是不能以root直接登陆的,建议使用普通用户登录后再用su切换到root用户。
如果必须要使用root登录,则可以按照以下步骤操作
- vim /etc/securetty
- ##########增加如下内容##########
- console
- pts/1
- pts/2
- pts/3
- pts/4
- pts/5
- pts/6
- pts/7
- pts/8
- pts/9
- pts/10
- pts/11
- tty1
- tty2
- tty3
- tty4
- tty5
- tty6
- tty7
- tty8
- tty9
- tty10
- tty11
- #service xinetd restart
- Stopping xinetd: [ OK ]
- Starting xinetd: [ OK ]
注意: 因为telnet属于明文传输且开放了23端口,所以在ssh服务升级成功后,为了保证系统安全性,务必关闭telnet服务!
本文出自 “老徐的私房菜” 博客,谢绝转载!