openssh升级碰到的各种问题解决方法
openssh下载:https://www.openssh.com/
openssl下载:https://www.openssl.org/
注:openssh需要配套openssl使用
软件包安装和编译安装的区别:
软件包安装:
yum provides ssh //查看openssh安装包(系统默认已安装)
yum install openssh -y //安装openssh
rpm -qa | grep openssh //查看openssh安装包的版本
ssh -V //查看openssh和配套openssl版本(环境变量未改变时使用)
查找ssh命令所在目录: find / -name ssh ,在 /usr/bin/ssh目录下 (bin目录为命令所在目录,sbin目录为服务所在目录)
查看动态链接库(openssh的动态链接库由openssl提供):
查看ssh状态:systemctl status sshd
编译安装目录:
在编译安装程序的时候,如果没有指定安装目录,一般默认安装在/usr/local目录下,服务在/usr/local/sbin ,软件在 /usr/local/bin , 配置文件在 /usr/local/etc , 动态链接库在 /usr/local/lib64(lib),可指定安装目录 ,命令可以用 ./configure --help 查看
启动服务: /usr/local/sbin/sshd
关闭服务: ps aux | grep sshd ,找到PID ,然后kill -9 PID
开机自启: chmod +x /etc/rc.d/rc.local //redhat 7里面首次需要修改该文件权限
echo “/usr/local/sbin/sshd ” >> /etc/rc.d/rc.local
注:需要关闭系统原来的sshd服务,否则会出现端口冲突。
注:升级openssh可以直接下载openssh包,编译安装,但是可能出现无法识别到库,或者版本不对问题。当出现该问题时,可以在openssl官网下载最新的openssl安装包,然后新安装openssl。
以下举例另外安装openssh和openssl:
操作系统版本: redhat 7.3
openssh版本:
1、上传openssh和openssh包,可使用
rz命令进行上传,改命令由lrzsz-0.12.20-36.el7.x86_64 提供
2、解压安装包
file 安装包 //查看压缩方式
确定压缩方式,进行解压
tar -zxvf 安装包
3、安装openssl
mkdir /usr/local/openssl-1.1.1d //创建和openssl版本相同的目录名(便于后期升级进行识别以及卸载)
进入openssl目录
./config --prefix=/usr/local/openssl-1.1.1d //prefix:指定安装目录
make && make install //进行编译安装
make uninstall //卸载,或者删除安装目录 rm -fr /usr/local/openssl-1.1.1d
安装完成,查看openssl版本:
此时出现了没有库文件情况。
进入到安装目录:
cd /usr/local/openssl-1.1.1d
查看命令需要的库文件:
将库文件写入库配置目录
重新加载库:ldconfig -v
重新查看版本:(当前在openssl安装目录下,使用命令./bin/openssl version -a 查看版本以及调用的库文件)
4、安装openssh
mkdir /usr/local/openssh-8.1p1 //创建新的安装目录,目的同上
进入解压目录:
./configure --prefix=/usr/local/openssh-8.1p1 --with-ssl-dir=/usr/local/openssl-1.1.1d
prefix为指定程序安装目录,--with-ssl-dir是指定调用的openssl,指定openssl的安装目录
出现报错:zlib没有安装,安装后再次执行上面命令即可
configure: error: *** zlib.h missing - please install first or check config.log ***
yum install -y zlib*.
检查完毕,执行make && make install 安装即可
验证安装:
5、最后操作,使用新openssh版本
注:如果是在虚拟化平台上,建议进入虚拟化操控台界面操作,否则请开启telnet服务,以供临时使用。
systemctl status sshd //查看系统的sshd服务状态如果是运行的,则关闭
systemctl stop sshd
systemctl disable sshd //关闭系统sshd服务开机自启(也可以卸载系统的openssh服务,如果已经使用的编译安装的sshd服务,则用kill干掉进程,然后查看是否在开启自启服务中,如果在,则删除行,该操作会在后面讲到)
注:新安装的sshd服务默认不允许root直接远程登录,首先需要创建其他账户,然后使用其他账户进行远程登录,再登陆到root账户,如果需要root用户远程登录,则需要修改配置文件sshd_config,在/usr/local/openssh-8.1p1/etc/sshd_config
修改配置文件,然后重启服务
PermitRootLogin yes
/usr/local/openssh-8.1p1/sbin/sshd //启动新服务
检查服务是否启动
使用新sshd版本连接:
设置服务开机自启:
cd /etc/rc.d
ls -l //查看rc.local文件是否有x权限
chmod +x rc.local //赋予可执行权限
echo /usr/local/openssh-8.1p1/sbin/sshd >> rc.local
验证是否正确
cat rc.local
将启动命令放入该文件中(如果以前有编译安装的sshd程序在该文件中,则将以前的自启动命令移除)
注:编译安装的程序建议直接用绝对路径执行命令,无需加载如环境变量。