1.升级前准备
内网的linux系统在安全扫描,如果使用的是老版本的linux 系统肯定会提示升级openssh,现在基本要求升级到openssh7.3p1.
所以在安装前需要下载openssh7.3p1
在安装过程可能会提示openssl版本的问题下载最新的openssl-1.0.2h
因为安装过程中可能会出现各种报错问题,遇到时候可以根据报错解决问题。例如gcc版本不对,zlib版本不对这两个我在安装过程都没有遇到。GCC如果连接外网或者内网有yum源 可以直接yum install gcc 安装。
安装前可以查看到版本 ssh -V 这个版本是很低的,系统版本是redhat 5.4
可以使用远程上传工具将下载好的两个文件上传到需要升级的linux服务器上面我使用的xshel里面的xftp上传的
2.升级过程
解压文件就不用我说了吧:tar xzvf openssh-7.3p1.tar.gz
tar xzvf openssl-1.0.2h.tar.gz
我在第一次升级的时候没有先升级openssl出现如下报错:
./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh --with-pam --with-ssl-dir=/usr/local/openssl --with-md5-passwords --mandir=/usr/share/man
编译时候可以不带-with-md5-passwords
2.1 升级openssl
有人可能会问是否需要卸载openssl,个人建议如果你是业务机器还是先不要卸载,原因是如果你卸载可能你有业务也需要使用openssl比如web服务器就有可能会用到,如果你卸载那么就会出现故障,导致整个业务无法使用,我们可以把新版本的安装到你指定的一个位置,后面在使用ln连接过去。这样不会因为卸载导致故障。在之前升级到openssh到7.2时候就卸载openssl结果提示无法卸载我强制卸载最后就业务无法使用了。
ln相当于什么呢?快捷方式,如果在windows下安装个程序我们可以在新建快捷方式。那么在linux系统下相同也是可以的。当然这是我的个人理解
cd openssl-1.0.2h ./config --prefix=/usr/local/ssl shared zlib-dynamic enable-camellia
出现如下提示说明编译成功,需要在运行make depend ,在运行mke&&make install
上面就表示已经安装完成,但是现在还需要做一些设置就创建快捷方式和连接库文件
mv /usr/bin/openssl /usr/bin/openssl.bak mv /usr/include/openssl /usr/include/openssl.bak ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl ln -s /usr/local/ssl/include/openssl /usr/include/openssl echo "/usr/local/ssl/lib" >> /etc/ld.so.conf ldconfig -v
#检测库文件
Openssl version -a
检查版本
2.2 升级openssh
./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh --with-pam --with-ssl-dir=/usr/local/openssl --with-md5-passwords --mandir=/usr/share/man
发现还是有这样的报错,原因是上面的的指定--with-ssl-dir=/usr/local/openssl 是错误的应该是和上面的安装openssl设置的相同的,/usr/local/ssl .
./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh --with-pam --with-ssl-dir=/usr/local/ssl --with-md5-passwords --mandir=/usr/share/man
这样就成功编译了。
在安装之前需要先把之前的配置文件备份下
mv /etc/ssh/ssh_config /etc/ssh/ssh_config.bak mv /etc/ssh/sshd_config /etc/ssh/sshd_config.bak make && make install
现在就可以安装了,前面一直没有说的一个问题就是这个是远程安装那么安装以后如果需要修改配置文件,不能再使用ssh修改,可以使用telnet或者其他的替代程序操作
发现了什么重启以后没有成功啊。显示的还是之前的,我没有原来的卸载 rpm -e ‘rpm -qa|grep openssh’
修改配置文件和卸载需要使用其他方式登录上去 我使用的是虚拟化的我直接使用vSphere client远程连接上去操作。
3.修改配置文件
卸载之后将你新安装的的文件里面对应ssh和sshd分别复制到/usr/bin/ssh和/usr/sbin/sshd.
然后在根据你的操作系统把解压文件下面的contrib里面找到你的系统是redhat还是其他 里面的sshd.init文件复制到/etc/init.d/sshd 这样就可以重新启动了。
特别说明:我一开始没有卸载原来的版本 直接这样操作发现重启服务还是原来的版本,这个和openssl有点不一样。那个可以和旧版本同时存在但是这个不行。就好像我们在windows下安装某些软件不同的版本必须卸载到另外的版本。产品能够去之后发现远程使用root无法登录还是需要修改配置文件。
配置文件主要是:/etc/ssh/sshd_config
上面第一个是说他的端口为22 第二个是说是ssh2 第三个就是开启远程root登录了。
第一个位置是防止有事会在远程登录有个错误提示需要把这个开启。
第二个位置是将sftp的文件位置设定好否则sftp无法使用
这些都完成之后重启服务service sshd restart(注意是重启 不是start 否是无效的)
4.远程测试
如果没有修改配置文件远程报错:
修改重启之后:
特别
今天遇到新的问题就是同事reboot我升级之后的linux系统发现不能远程。我到机器上面看sshd没有启动。我以为是我没有设置chkconfig sshd on导致的但是我查看在几个模式下都是启动的啊,后来我想可能是这种升级方法有弊端,建议保险起见,虽然我也看到了S55sshd,但是在加两个软连接。因为是生产机器我,没有在进一步测试是不是同事操作的其他问题。
今天在准备测试没有随系统启动问题时候,新安装的centos 7然后遇到了4个报错:
1.gcc没有安装
2.zlib.h missing原本我以为是zlib没有安装但是查询已经安装最后发现是zlib-devel没有安装导致的问题
3.openssl headers missing查询openssl已经安装版本也没问题是openssl-devel
4.PAM headers not found同样因为open-devel问题
再将centos7 升级到openssh7.3sp1使用xshell显示找不到host key的加密算法
解决办法是rm /etc/ssh/ssh_host_*
在重启电脑就可以了,相当于吧之前的秘钥全部重置