升级 OpenSSL
1.查看 OpenSSL版本
openssl version
2.下载最新稳定版本 OpenSSL
wget https://www.openssl.org/source/openssl-3.1.2.tar.gz
3.解压缩,安装
#备份默认的openssl,防止升级失败恢复
mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl /usr/include/openssl.bak
## 解压文件
tar -zxvf openssl-3.1.2.tar.gz
cd openssl-3.1.2
## 编译,并指定编译参数
#如果此步骤报错,需要安装perl以及gcc包
./config --prefix=/usr/local/openssl
####################################################
问题描述 Can‘t locate IPC/Cmd.pm in
解决办法:
(1)安装perl-CPAN
yum install -y perl-CPAN
(2)进入perl shell中
perl -MCPAN -e shell
进入后第一步选yes
第二步选manual
第三步选yes
(3)出现以下cpan[1]> install IPC/Cmd.pm
后面就可以等着了,需要等几个小时,有点慢,耐心等待即可
####################################################
# 安装
make && make install
4.配置
## 将原来的openssl命令入口剪切至/tmp做备份
mv /usr/bin/openssl /tmp
## 软链接,将新版的openssl命令入口做一个软链接到/usr/bin目录下做替换
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
## 注意,软链接此处的源文件路径,我们可能不一致,是由我们在编译阶段传入的配置参数控制的,具体要 在/usr/local目录下寻找确定一下
ln -s /usr/local/openssl/lib64/libssl.so.3 /usr/lib64/libssl.so.3 ## 软链接
ln -s /usr/local/openssl/lib64/libcrypto.so.3 /usr/lib64/libcrypto.so.3 ## 软链接
## 再次查看openssl版本,可以看到更新成功
openssl version
安装Telnet
1.安装telnet服务端
yum -y install xinetd telnet-server
2.默认情况下,系统是不允许root用户telnet远程登录的。如果要使用root用户直接登录,需设置如下内容。或者可以添加一个可以登录的用户,登录并su到root用户(建议采用此方法,保证系统安全)。此步骤可跳过!
允许root用户通过telnet登陆:
编辑/etc/pam.d/login,注释掉下面这行
vi /etc/pam.d/login
#把auth的限制去掉
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
开启root用户远程登陆。此步骤可跳过!
vi /etc/pam.d/remote
auth required pam_securetty.so
3.重启telnet和xinetd服务 【telnet服务依赖于xinetd服务】
systemctl restart telnet.socket
systemctl restart xinetd
systemctl enable xinetd
systemctl enable telnet.socket
4.将 23端口(系统默认23为telnet端口)添加到防火墙允许的端口的列表中。
firewall-cmd --zone=public --add-port=23/tcp --permanent
firewall-cmd --zone=public --add-port=22/tcp --permanent
firewall-cmd --reload
5.尝试用telnet命令登录:telnet 192.168.0.15 23 若出现Login incorrect
#执行tail /var/log/secure,查看登录日志:
Sep 7 16:03:10 localhost login: pam_securetty(remote:auth): access denied: tty 'pts/1' is not secure !
#编辑 /etc/securetty
vi /etc/securetty
把pts/1加入到securetty文件中,保存并退出,重启telnet服务
vi /etc/pam.d/login
将auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so注释,即在代码前面加上#
注释后输入:wq保存,并重启telnet服务
升级OpenSSH
1.关闭SElinux
#检查是否关闭:
getenforce
#如果未关闭,关闭之
setenforce 0
#上面只是临时关闭了,重启后不生效。下面改配置文件,使永久生效。
vi /etc/selinux/config
#修改:
SELINUX=disabled
#保存退出。
2.安装相关依赖包
yum -y install gcc make perl zlib zlib-devel pam pam-devel
# 安装完毕后执行下面命令,确保所有依赖包正常安装
rpm -qa | egrep "gcc|make|perl|zlib|zlib-devel|pam|pam-devel"
3.升级openSSH(注意从这步开始,通过Telnet登录到服务器,务必)
#停止ssh服务
systemctl stop sshd
#下载openssh-9.4p1.tar.gz
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.4p1.tar.gz
#备份ssh配置文件
cp -r /etc/ssh /etc/ssh.old
# 查看系统原有openssh包
rpm -qa | grep openssh
#删除旧版本
rpm -e --nodeps `rpm -qa | grep openssh`
#解压新版本
tar -zxvf openssh-9.4p1.tar.gz
cd openssh-9.4p1
# 编译配置 这里请注意--with-ssl-dir 是你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-zlib=/usr/local/zlib --without-hardening
#编译安装
make && make install
#调整文件权限
chmod 600 /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_ed25519_key
#复制配置文件
cp -a contrib/redhat/sshd.init /etc/init.d/sshd
chmod u+x /etc/init.d/sshd
#还原 原配置文件
mv ../sshd.backup /etc/pam.d/sshd
mv ../sshd_config.backup /etc/ssh/sshd_config
vi /etc/ssh/sshd_config
Port 22
ListenAddress 0.0.0.0
#UsePAM no
PasswordAuthentication yes
PermitEmptyPasswords no
HostbasedAuthentication no
IgnoreRhosts yes
PermitRootLogin no
#添加自启动
chkconfig --add sshd
chkconfig sshd on
#重启服务
systemctl restart sshd
# 查看版本, 验证结果 - 显示9.4p1即成功
ssh -V
centos7 系统手动安装openssh后使用systemctl命令无法管理sshd服务问题解决
解决方法
以下是我当前情况的解决方案,不代表所有类似情况都适用。
将源码安装包中 contrib/redhat/sshd.init 文件复制到 /etc/init.d/sshd 下并添加可执行权限。
cp -a contrib/redhat/sshd.init /etc/init.d/sshd
chmod u+x /etc/init.d/sshd
ln /usr/local/openssh/sbin/sshd /usr/sbin/sshd
ln /usr/local/openssh/bin/ssh-keygen /usr/bin/ssh-keygen
这时,/run/systemd/generator.late/ 目录下会产生一个名为 sshd.init.service的 systemd 服务配置文件。
将这个文件复制到 systemd 的服务配置文件目录下
cp /run/systemd/generator.late/sshd.init.service /usr/lib/systemd/system/sshd.service
chmod +x /usr/lib/systemd/system/sshd.service
这时再通过systemctl命令操作sshd服务就正常了。
sshd -V
OpenSSH_9.4, OpenSSL 3.1.2 1 Aug 2023