问题
- openssh 如何升级到 openssh-8.1p1 版本,升级 openssl 到 1.0.2u
- centos7.2 升级前后的对比
解决
1、进入正文,建议先安装 telnet-server 以及 xinetd,万一失败无法登录,还可以用 telnet 登录 之前有写过这篇文章,这里就不详细说了,详情见链接:CentOS7 安装 telnet 服务
2、升级需要几个依赖包,是和编译相关的
yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel pcre-devel pam-devel
3、安装 pam 和 zlib 等(后面的升级操作可能没用到 pam,安装上也没啥影响,如果不想安装 pam 请自行测试)
yum install -y pam* zlib*
4、下载 openssh 和 openssl 的包
wget https://openbsd.hk/pub/OpenBSD/OpenSSH/portable/
wget https://ftp.openssl.org/source/
安装openssl
5、开始安装 openssl
# 解压openssl目录
tar xfz openssl-1.0.2u.tar.gz
# 备份下面 2 个文件或目录(如果存在的话就执行)
ll /usr/bin/openssl
mv /usr/bin/openssl /usr/bin/openssl_backup
ll /usr/include/openssl
mv /usr/include/openssl /usr/include/openssl_backup
# 进入openssl目录
cd /usr/local/download/openssl-1.0.2u/
# 配置、编译并安装
./config --prefix=/usr/local/ssl -d shared
make -j 4 && make install
# 以上命令执行完毕,echo $? 查看下最后的 make install 是否有报错,0 表示没有问题
echo $?
# 下面 2 个文件或者目录做软链接 (刚才前面的步骤 mv 备份过原来的)
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/ssl/include/openssl /usr/include/openssl
# 查看是否软链成功
ll /usr/bin/openssl
ll /usr/include/openssl -ld
#命令行执行下面 2 个命令加载新配置
echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
/sbin/ldconfig
# 查看openssl版本
openssl version
6、通过上面最后一个命令可以看到,openssl 已经升级成功
安装 openssh
7、安装 openssh
# 解压
tar xfz openssh-8.1p1.tar.gz
cd openssh-8.1p1
# 可能文件默认显示uid和gid数组都是1000,这里重新授权下。不授权可能也不影响安装(请自行测试)
chown -R root.root /usr/local/openssh-8.1p1
# 先备份原来ssh的配置文件和目录
mv /etc/ssh/ /etc/ssh_backup
# 配置、编译、安装
./configure --prefix=/usr/ --sysconfdir=/etc/ssh --with-openssl-includes=/usr/local/ssl/include \
--with-ssl-dir=/usr/local/ssl --with-zlib --with-md5-passwords --with-pam && make && make install
# 我的需求是禁止root登录,所以配置了 PermitRootLogin no(自行去修改)
grep "^PermitRootLogin" /etc/ssh/sshd_config
# 关闭 UseDNS 加速 SSH 登录 (自行去修改)
grep "UseDNS" /etc/ssh/sshd_config
# 从原先的解压的包中拷贝一些文件到目标位置、赋予执行权限、添加服务、开机启动
cp -a contrib/redhat/sshd.init /etc/init.d/sshd
cp -a contrib/redhat/sshd.pam /etc/pam.d/sshd.pam
chmod +x /etc/init.d/sshd
chkconfig --add sshd
systemctl enable sshd
# 把原来的systemd管理的sshd文件删除或移动,否则会影响重启sshd服务
mv /usr/lib/systemd/system/sshd.service /data/
# 设置 sshd 服务开机启动
chkconfig sshd on
8、测试
# 启动sshd服务
/etc/init.d/sshd restart
# 查看端口情况(可以看到22端口有占用)
netstat -lntp
# 关闭sshd服务看看22端口是否会释放
/etc/init.d/sshd stop
# 可以看到22端口被释放(测试成功)
netstat -lntp
# 最后启动服务
/etc/init.d/sshd start
9、可以试着重启机器测试下登录 sshd 是否正常。测试没问题后也可以把 telnet 服务关闭了
# 关闭 telnet 服务
systemctl disable xinetd.service
systemctl stop xinetd.service
systemctl disable telnet.socket
systemctl stop telnet.socket
# 也可以用 systemctl 来管理 sshd 服务
systemctl stop sshd
systemctl start sshd
systemctl restart sshd