对于可能很多人在离线更新openssh时都没找到一篇能解决实际问题的文章,那么今天它来了,请往下看。
提示:在进行生产环境操作时,需谨慎在尽可能一样的虚拟环境进行验证操作。(OS:如果不放心可以双保险,开启Telnet服务,具体步骤需自行搜索)
OpenSSH是 Secure SHell(安全外壳协议,简称SSH)协议的免费开源实现。SSH协议族可以用来进行远程控制, 或在计算机之间传送文件。而实现此功能的传统方式,如telnet(终端仿真协议)、 rcp ftp、 rlogin、rsh都是极为不安全的,并且会使用明文传送密码。OpenSSH提供了服务端后台程序和客户端工具,用来加密远程控制和文件传输过程中的数据,并由此来代替原来的类似服务。
OpenSSH 是一组用于安全地访问远程计算机的连接工具。 它可以作为 rlogin、 rsh rcp 以及 telnet 的直接替代品使用。 更进一步, 其他任何 TCP/IP 连接都可以通过 SSH 安全地进行隧道/转发。 OpenSSH 对所有的传输进行加密, 从而有效地阻止了窃听、 连接劫持。
OpenSSH这一术语指系统中使用的Secure Shell软件的软件实施。用于在远程系统上安全运行shell。如果您在可提供ssh服务的远程Linux系统中拥有用户帐户,则ssh是通常用来远程登录到该系统的命令。ssh命令也可用于在远程系统中运行命令。
cat /etc/redhat-release
2.再根据系统版本选择对应的组件进行上传。(建议所有上传的文件放到/tmp下面)
升级OpenSSH的过程需要依赖ZLIB、Perl、OpenSSL,升级OpenSSL可能会报错,可能还需要依赖PAM。所以先要离线下载这些依赖对应的包:zlib-1.2.13.tar.gz,perl-5.20.0.tar.gz,Linux-PAM-1.3.1.tar.xz,openssl-1.1.1n.tar.gz,openssh-9.3p1.tar.gz。(安装顺序)
如果gcc不存在就上传对应版本的gcc相关rpm包
上传完之后直接全部安装包执行
rpm -Uvh *.rpm --force --nodeps
--force 选项表示强制执行操作,即使它可能会导致一些问题或不安全。这意味着软件包管理工具将忽略任何警告或错误,并尝试继续执行操作。
--nodeps 选项表示跳过依赖关系检查,即不检查要安装、更新或删除的软件包是否依赖于其他软件包或库。这可以用于强制执行操作,即使满足依赖关系可能会引起冲突或问题。
4. 安装/升级 zlib
which zlib //查看是否存在zlib的路径,不存在则安装zlib
tar -zxvf zlib-1.2.13.tar.gz
cd zlib-1.2.13
./configure --prefix=/usr/zlib
make && make install
perl -v //查看perl版本 低于5.10就不支持高版本的openssh更新
tar -zxf perl-5.20.0.tar.gz
cd perl-5.20.0
./Configure -de
make && make install
perl -v
tar -xf Linux-PAM-1.3.1.tar.xz
cd Linux-PAM-1.3.1
./configure
make && make install
ssh -V //查看openssl的版本 最低不能低于1.1.1
//查看相关文件是否备份
ls -l /usr/bin/openssl*
ls -ld /usr/include*
cp /usr/bin/openssl /usr/bin/openssl.old
cp -r /usr/include /usr/includeold
//编译安装
cd /tmp
tar -zxvf openssl-1.1.1n.tar.gz
cd openssl-1.1.1n
./config --prefix=/usr --shared
make
make install
openssl version -a
1.先进行相关文件备份
cat /etc/redhat-release //查看系统版本
ls -l /etc/pam.d/sshd*
ls -ld /etc/ssh*
cp /etc/pam.d/sshd /etc/pam.d/sshd20230612
cp -r /etc/ssh /etc/ssh20230612
2.开始进行解压缩然后进行相关操作
cd /tmp
tar -xzvf openssh-9.3p1.tar.gz
cd openssh-9.3p1
service sshd stop
rm -rf /etc/ssh
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-zlib --with-md5-passwords --with-ssl-dir=/usr/ssl
make && make install
cd contrib/redhat
cp sshd.init /etc/init.d/sshd
chkconfig sshd on
chkconfig sshd --list
cp /etc/ssh20230612/sshd_config /etc/ssh/sshd_config
cp /etc/pam.d/sshd20230612 /etc/pam.d/sshd
/usr/sbin/sshd -t -f /etc/ssh/sshd_config
service sshd start
centos7的系统
systemctl stop sshd.service
rm -rf /etc/ssh
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-zlib --with-md5-passwords --with-ssl-dir=/usr/ssl
make && make install
cd contrib/redhat
cp sshd.init /etc/init.d/sshd
systemctl enable sshd
chkconfig sshd --list
cp /etc/ssh20230612/sshd_config /etc/ssh/sshd_config
cp /etc/pam.d/sshd20230612 /etc/pam.d/sshd
/usr/sbin/sshd -t -f /etc/ssh/sshd_config
systemctl start sshd.service
4.查看是否存在openssh的rpm包,如果不存在就不需要进行下面的步骤
rpm -qa | grep openssh //查看是否存在openssh的rpm包
cd /tmp/openssh-9.3p1
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-zlib --with-md5-passwords --with-ssl-dir=/usr/ssl
make
rpm -e `rpm -qa | grep openssh` --nodeps //卸载rpm包
make install
cd contrib/redhat
cp sshd.init /etc/init.d/sshd
centos6系统
chkconfig sshd on
chkconfig sshd --list
cp /etc/ssh20230612/sshd_config /etc/ssh/sshd_config
cp /etc/pam.d/sshd20230612 /etc/pam.d/sshd
/usr/sbin/sshd -t -f /etc/ssh/sshd_config
service sshd start
centos7系统
systemctl enable sshd
chkconfig sshd --list
cp /etc/ssh20230612/sshd_config /etc/ssh/sshd_config
cp /etc/pam.d/sshd20230612 /etc/pam.d/sshd
/usr/sbin/sshd -t -f /etc/ssh/sshd_config
systemctl start sshd.service
在centos6中遇到的问题如下:
找不到zlib位置,在编译的时候加上刚刚编译安装的zlib的路径,然后下面的步骤是一样的,到区分系统继续执行编译之后的命令。
cd /tmp/openssh-9.3p1
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-zlib=/usr/zlib --with-md5-passwords --with-ssl-dir=/usr/ssl //指定zlib之前安装的路径
如下报错是因为pam未安装成功,重新执行安装 pam-devel
此篇文章是我踩过好几个坑,深刻的教训换来的经验,如果对您有帮助麻烦点赞、收藏加关注,以后也可以互相交流一下学习经验捏。