openssh-8.3p1.tar.gz、zlib-1.2.11.tar.gz、openssl-1.1.1g.tar.gz
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.3p1.tar.gz
wget http://www.zlib.net/zlib-1.2.11.tar.gz
wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz
2、关闭SElinux
关闭SElinux命令:
setenforce 0
上面只是临时关闭了,重启后不生效。下面改配置文件,使永久生效。
vi /etc/selinux/config
修改:
SELINUX=disabled
保存退出
3、停止ssh服务
以下命令将停止系统原有的sshd服务,这将导致服务器无法通过ssh远程连接。建议直接操作服务器进行升级openssh的过程,如果不方便直接操作服务器,可以安装配置telnet,通过telnet远程连接服务器,具体方法本文不赘述
systemctl stop sshd
4、卸载原有的openssh包
看系统原有openssh包
rpm -qa | grep openssh
根据上面查询出的结果,卸载系统里原有Openssh(一般有三个包,全部卸载)
rpm -e --nodeps ***(***替换为上面查询的结果)
卸载完成后执行rpm -qa | grep openssh,确保没有回显
5、解压源码包
tar -zxvf zlib-1.2.11.tar.gz
tar -zxvf openssh-8.3p1.tar.gz
tar -zxvf openssl-1.1.1g.tar.gz
6、编译安装zlib
cd zlib-1.2.11
./configure --prefix=/usr/local/zlib
make && make install
新建并编辑配置文件:
vi /etc/ld.so.conf.d/zlib.conf
加入如下内容后保存退出
/usr/local/zlib/lib
刷新库文件,加载刚才编译安装的zlib生成的库文件
ldconfig -v
7、编译安装openssl
cd openssl-1.1.1g
./config --prefix=/usr/local/ssl -d shared
make && make install
备份现有文件目录
mv /usr/bin/openssl /usr/bin/openssl.bak
创建ssl相关软连接
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/ssl/include/openssl /usr/include/openssl
新建并编辑配置文件
vi /etc/ld.so.conf.d/ssl.conf
加入如下内容后保存退出
/usr/local/ssl/lib
刷新库文件,加载刚才编译安装的ssl生成的库文件
ldconfig -v
查看openssl版本
openssl version -a
8、编译安装openssh
cd openssh-8.3p1
./configure --prefix=/usr/local/openssh --with-zlib=/usr/local/zlib --with-ssl-dir=/usr/local/ssl
make && make install
sshd_config文件修改
echo 'PermitRootLogin yes' >>/usr/local/openssh/etc/sshd_config
echo 'PubkeyAuthentication yes' >>/usr/local/openssh/etc/sshd_config
echo 'PasswordAuthentication yes' >>/usr/local/openssh/etc/sshd_config
备份原有文件,并将新的配置复制到指定目录
mv /etc/ssh /etc/ssh.old
mv /usr/sbin/sshd /usr/sbin/sshd.bak
mv /usr/bin/ssh /usr/bin/ssh.bak
mv /usr/bin/ssh-keygen /usr/bin/ssh-keygen.bak
因为上面卸载了openssh,上面的一些文件已经不存在了,如果备份没成功,不必在意
mkdir /etc/ssh
cp /usr/local/openssh/etc/sshd_config /etc/ssh/sshd_config
cp /usr/local/openssh/etc/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_ecdsa_key.pub
cp /usr/local/openssh/bin/ssh /usr/bin/ssh
cp /usr/local/openssh/sbin/sshd /usr/sbin/sshd
cp /usr/local/openssh/bin/ssh-keygen /usr/bin/ssh-keygen
8、配置sshd服务开机启动
**注意啦!注意啦!**使用默认的源码安装的openssh,在使用systemd管理sshd服务时,你会发现,启动命令会卡住,稍后用systemctl 查看status时发现卡在正在启动(activating)的阶段
出现这个问题的原因是openssh的源码默认并没有与systemd进行集成和适配,sshd在启动完成后,没有给systemd发消息,systemd就一直在那傻等,等过了超时时间就尝试重新启动sshd。解决此问题的方法有两种,一种是修改openssh的源代码,与systemd适配,可参考http://blog.chinaunix.net/uid-28813320-id-5786956.html,本人未尝试此方法,有兴趣的可以尝试看看。另一种方式就是以旧的sysv方式启动sshd服务,具体过程如下:
cd openssh-8.3p1
cp -p contrib/redhat/sshd.init /etc/init.d/sshd
chmod +x /etc/init.d/sshd
chkconfig --add sshd
chkconfig sshd on
service sshd restart
查看sshd服务状态
systemctl status sshd
查看openssh版本
ssh -V
注意:本文归作者所有,未经作者允许,不得转载