openssh 升级

359 阅读3分钟

一、前置步骤

1.关闭防火墙,防止升级openssh时无法登陆,telnet也无法登陆

service iptables stop

2.安装telnet

yum install telnet-server

3.设置telnet默认允许root登陆或者其他用户通过telnet登陆

修改telnet配置文件 将其中disable字段的yes改为no或者使用#注释,启用telnet服务,并完成重启
vi /etc/xinetd.d/telnet

service telnet
{
        flags           = REUSE
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/sbin/in.telnetd
        log_on_failure  += USERID
        disable         = no
}

/etc/init.d/xinetd restart 或者/etc/init.d/xinetd start
chkconfig xinetd on 使telnet服务开机启动,避免升级过程中服务器意外重启后无法远程登录系统

4.新开启一个远程终端以telnet登录验证是否成功启用

telnet [ip]

如果无法连接可以查看 vi /etc/services 中端口情况

5.安装编译所需工具包

yum  install gcc pam-devel zlib-devel -y

二、openssl升级

1.备份当前openssL

find / -name openssl

查询结果如:

/usr/lib64/openssl
/usr/bin/openssl
/etc/pki/ca-trust/extracted/openssl

备份如:

mv /usr/lib64/openssl /usr/lib64/openssl.old
mv /usr/bin/openssl /usr/bin/openssl.old
mv /etc/pki/ca-trust/extracted/openssl /etc/pki/ca-trust/extracted/openssl.old	

2.如下两个库文件须先备份,因系统内部分工具(如yum、wget等)依赖此库

cp /usr/lib64/libcrypto.so.10 /usr/lib64/libcrypto.so.10.old
cp /usr/lib64/libssl.so.10 /usr/lib64/libssl.so.10.old 

3.解压openssl源码并编译安装

tar -zxvf openssl
cd openssl
#必须加上--shared,否则编译时会找不到新安装的openssl的库而报错
./config --prefix=/usr --shared 
make
#可能显示错误:Parse errors: No plan found in TAP output  解决:忽略错误,继续执行安装
make test  
make install
#查看是否升级成功
openssl version -a

三、openssh升级

1.备份当前openssh

mv /etc/ssh /etc/ssh.old

2.解压openssh源码并编译安装

源码下载:www.openssh.com/

 tar -zxvf openssh
 cd openssh
./configure --prefix=/usr/local --sysconfdir=/etc/ssh --with-pam --with-zlib --with-md5-passwords
make && make install
//默认路径(注意服务器中使用指定路径的情况,导致升级不成功)
mv /usr/bin/ssh /usr/bin/ssh_bak
cp /usr/local/bin/ssh /usr/bin/ssh
mv /usr/sbin/sshd /usr/sbin/sshd_bak
cp /usr/local/sbin/sshd /usr/sbin/sshd
//建议备份
cp /etc/ssh/sshd_config /etc/ssh/sshd_config_bak	

3. 重启服务并查看是否升级成功

service sshd restart
ssh -V

注意:如果升级操作一直是在ssh远程会话中进行的, 上述sshd服务重启命令可能导致会话断开并无法使用ssh再行登入(即ssh未能成功重启), 此时需要通过telnet登入再执行sshd服务重启命令。

4. 设置可以直接使用root用户登录

echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
service sshd restart	

四、善后

1. 开启防火墙

2. 确认ssh&&secureCRT都可以正常登陆

3. 关闭telnet设置

vi /etc/xinetd.d/telnet

service telnet
{
        flags           = REUSE
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/sbin/in.telnetd
        log_on_failure  += USERID
        disable         =  yes
}

/etc/init.d/xinetd restart 或者/etc/init.d/xinetd start

五、异常处理

1. 更新完新的openssl后 可能会出现secureRTC无法连接的问题,但是可以使用ssh连接

原因: sshd(服务端) etc/ssh/sshd_conf 中无对应秘钥算法

sshd启动报错:Bad SSH2 cipher spec '...'
echo 'Ciphers' ssh -Q cipher | paste -d, -s >> /etc/ssh/sshd_config

sshd启动报错:Bad SSH2 mac spec '...'
echo 'MACs' ssh -Q mac | paste -d, -s >> /etc/ssh/sshd_config

sshd启动报错:Bad SSH2 KexAlgorithms '...' (可以升级完成后 先添加上这套秘钥算法)
echo 'KexAlgorithms' ssh -Q kex | paste -d, -s >> /etc/ssh/sshd_config

2. ssh : unrecognized service

find / -name sshd.init 获取到 如: contrib/redhat/sshd.init
cp -p contrib/redhat/sshd.init /etc/init.d/sshd
chmod +x /etc/init.d/sshd
chkconfig --add sshd
chkconfig sshd on
chkconfig --list sshd
/etc/init.d/sshd restart

注意:如果升级操作一直是在ssh远程会话中进行的, 上述sshd服务重启命令可能导致会话断开并无法使用ssh再行登入(即ssh未能成功重启), 此时需要通过telnet登入再执行sshd服务重启命令。

3. 升级openssh编译时报错“configure: error: *** working libcr

最简单的解决办法 -- 安装openssl-devel包即可 yum install -y openssl-devel

4. 启动时Unsupported option GSSAPICleanupCredentials报错

注释/etc/ssh/ssh_config的GSSAPICleanupCredentials的内容