近期公司维护的一个项目中有部分内网中的服务器需要升级openssh(openssl)服务的软件,虽然openssh服务在一般生产环境中运用的功能不是很复杂,但是为了保证平滑升级还是有一些需要特别注意和谨慎操作的细节,下面就详细的分析一下吧。

查看当前的ssh服务版本

   
   
   
   
  1. # ssh –V  
  2. OpenSSH_4.3p2, OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008 

检测之前安装的包(openssl和openssh同时更新)

   
   
   
   
  1. # rpm -qa | grep openssl   
  2. openssl-0.9.8e-12.el5_4.6  
  3.  
  4. # rpm -qa | grep openssh  
  5. openssh-4.3p2-41.el5  
  6. openssh-server-4.3p2-41.el5  
  7. openssh-clients-4.3p2-41.el5  
  8. openssh-askpass-4.3p2-41.el5  

卸载openssh和openssl的rpm安装包

   
   
   
   
  1. #rpm -e `rpm -qa | grep openssh`  
  2. #rpm -e `rpm -qa | grep openssl` --nodeps 

此时会把所有关于ssh服务的配置文件自动删除,但会自动生成配置文件备份/etc/ssh/ssd_config.rpmsave

源码安装openssh、openssl,为了避免zlib库文件版本过低,同时编译安装zlib库

   
   
   
   
  1. # tar xzvf zlib-1.2.6.tar.gz  
  2. # cd zlib-1.2.6  
  3. # ./configure  --prefix=/usr/local/zlib  
  4. #make  &&  make install  
  5.  
  6. # tar xzvf openssl-1.0.1.tar.gz  
  7. # cd openssl-1.0.1  
  8. #./config  --prefix=/usr/local/openssl   
  9. # make &&  make install  
  10.  
  11. #tar xzvf openssh-5.9p1.tar.gz  
  12. #cd  openssh-5.9p1  
  13. #./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  
  14. # make && make install 

出现:configure: error: PAM headers not found 错误,需要安装pam-devel的rpm包

   
   
   
   
  1. # yum install  –y  pam-devel  
  2. 修改相关配置文件  
  3. # cp -p contrib/redhat/sshd.init /etc/init.d/sshd  
  4. # chmod u+x /etc/init.d/sshd  
  5. # chkconfig --add sshd  
  6. #cp /usr/src/openssh5.9p1/sshd_config  /etc/ssh/sshd_config  
  7. # cp /usr/local/openssh/sbin/sshd  /usr/sbin/sshd  
  8. # service sshd start       -----------断开连接!!!  
  9. Starting sshd:                          [  OK  ]  
  10.  

再次查看sshd服务的版本

   
   
   
   
  1. #ssh -V  
  2. OpenSSH_5.9p1, OpenSSL 1.0.1 14 Mar 2012 

至此升级成功!

由于原服务是用rpm包安装的,现需要通过指定版本的源码包升级,虽然先卸载ssh的rpm包后,进程依旧驻留在内存中,保持连接不断开,但万一在升级过程中由于网络、电源等原因意外中断,则无法再通过ssh服务远程登录服务器,同时为了防止在安装软件后的某些错误配置造成原连接断开后无法启动ssh服务而不能远程登录服务器,所以建议在一般生产环境中需要远程升级openssh服务时,先开始telnet服务。

   
   
   
   
  1. #yum install -y telnet  
  2. #vim /etc/xinetd.d/telnet  
  3.    
  4. # default: on  
  5. # description: The telnet server serves telnet sessions; it uses \  
  6. #       unencrypted username/password pairs for authentication.  
  7. service telnet  
  8. {  
  9.         flags           = REUSE 
  10.         socket_type     = stream 
  11.         wait            = no 
  12.         user            = root 
  13.         server          = /usr/sbin/in.telnetd  
  14.         log_on_failure  += USERID  
  15.         disable         = no //默认为yes,修改disable = no 
  16.   
  17. # service xinetd restart  
  18. Stopping xinetd:                                            [  OK  ]  
  19. Starting xinetd:                                            [  OK  ] 

查看telnet端口验证服务是否开启

   
   
   
   
  1. #netstat -tnlp | grep :23   
  2. tcp       0      0 0.0.0.0:23       0.0.0.0:*       LISTEN    32450/xinetd  

注意:为了安全,telnet是不能以root直接登陆的,建议使用普通用户登录后再用su切换到root用户。

如果必须要使用root登录,则可以按照以下步骤操作

   
   
   
   
  1. vim /etc/securetty 
  2. ##########增加如下内容##########  
  3. console  
  4. pts/1  
  5. pts/2  
  6. pts/3  
  7. pts/4  
  8. pts/5  
  9. pts/6  
  10. pts/7  
  11. pts/8  
  12. pts/9  
  13. pts/10  
  14. pts/11  
  15. tty1  
  16. tty2  
  17. tty3  
  18. tty4  
  19. tty5  
  20. tty6  
  21. tty7  
  22. tty8  
  23. tty9  
  24. tty10  
  25. tty11  
  26. #service xinetd restart  
  27. Stopping xinetd:                                           [  OK  ]  
  28. Starting xinetd:                                           [  OK  ]  

注意: 因为telnet属于明文传输且开放了23端口,所以在ssh服务升级成功后,为了保证系统安全性,务必关闭telnet服务!