源码编译方式升级从SSH7升级到openssh-8.1p1

故事背景:

最近因为一年一度的护网行动,SSH的版本检测7版已经低了,要求升级到8版。

原本的考虑,系统原本就在内网,也没有特别敏感的数据,应付一下算了,了解到检测的原理,只要修改配置文件,可以临时避过。

不过后来想想,还是升级,省的以后麻烦。

 

系统环境:Centos7.4   

原ssh版本 :openssh-7.4p1

需要升级到的版本是openssh-8.1p1

为了保险起见,先安装启用telnet,如果安装sshd服务,中途有意外,也避免了连接的麻烦。

 

第一步,安装telnet服务
扩展:telnet服务借助于xinetd服务进行方便的开启和关闭,
xinetd 被称为网络管理超级服务器,能进行访问控制和日志记录,节省系统资源。
 
yum install telnet telnet-server xinetd  -y      #yum安装3个包
 
装完依赖包之后,用rpm -qa 检查
rpm -qa telnet xinetd
 
在/etc/目录下放入一个(如果有就修改内容) 名为telnet  的配置文件,这样方便开启和关闭telnet服务;
然后在/etc/xinetd.d/目录下,创建命名为telnet的配置文件
vi /etc/xinetd.d/telnet
这里disable  = no   就是开启
 
脚本内容如下:
 
######################################## 
# default: on
# description: The telnet server serves telnet sessions; it uses \
#   unencrypted username/password pairs for authentication.
service telnet
{
    disable = no
    flags       = REUSE
    socket_type = stream
    wait        = no
    user        = root
    server      = /usr/sbin/in.telnetd
    log_on_failure  += USERID
}
#########################################
 因为服务是root启的,所以文件权限可以不修改。
 
systemctl start xinetd
 
systemctl status xinetd   查看状态
 
启动xinetd服务,查看23端口是否是xinetd使用
 
lsof -i :23
 
起个telnet的终端

接下来的操作,可以直接在telnet的窗口中进行(当然原来的ssh也是可以的,只有当升级出现意外,ssh才会断开):
 
先从openBSD获取源码安装包(或者从其他渠道):
#一般可以在/opt目录下进行
 
(一)安装依赖包
 yum install zlib-devel openssl-devel pam-devel -y
 
(二)解压源码安装包,使用原配置文件数据(在/etc/ssh目录),进行编译
 
tar -zxvf /opt/openssh-8.1p1.tar.gz -C /opt/
 
cd /opt/openssh-8.1p1
./configure --prefix=/usr/ --with-md5-passwords --with-pam --with-zlib --sysconfdir=/etc/ssh
 
#结束可以echo $?    没问题显示0
(三)原配置数据备份:
 
mkdir /tmp/backup
mv /etc/ssh/* /tmp/backup
 
(四)安装
make && make install
 
安装完成后,删除 /etc/ssh/*      
将原来的 备份数据 拷贝进来,并修改目录及子目录文件权限  600
 
rm -f /etc/ssh/*
cp -r /tmp/backup/* /etc/ssh/
chmod -R 600 /etc/ssh/*
 
将新的程序目录下 contrib/redhat/sshd.init 放入启动服务目录并改名为sshd, /etc/init.d/sshd   并给予执行权限
将新的程序目录下 contrib/redhat/sshd.pam 放入pam.d服务目录,名称不变, /etc/pam.d/sshd.pam
移走/usr/lib/systemd/system/sshd.service 到/tmp 目录
 扩展:(centos7对于启动服务方面的优化和centos6有了极大的改变,使用了systemd 代替init.d,由于sshd服务默认情况依然还是启动的service,不是socket,因此,改为centos6 init.d的启动方式,C7依然兼容C6的init.d的启动方式。)
 
cd /opt/openssh-8.1p1/contrib/redhat/
cp sshd.init /etc/init.d/sshd
chmod +x /etc/init.d/sshd
cp sshd.pam /etc/pam.d/sshd.pam
 
cd /usr/lib/systemd/system/
mv sshd.service /tmp/backup/
 
vi /etc/ssh/sshd_config
 
修改PermitRootLogin  yes    ###允许root用户账号登录shell
 
加入开机服务自启动
(1)  /sbin/chkconfig sshd on  
(2)  systemctl enable sshd.socket   (加入这个是因为上一条命令,提示要求增加)
 
最后,启动sshd服务     systemctl start sshd
 
新开ssh窗口登录系统查看版本:  
 
ssh -V 
 
安装完成,关闭telnet服务
 
vi /etc/xinetd.d/telnet       #将no 改为yes
restart xinetd服务可以验证telnet不能登录系统;
最后,停用xinetd 服务。
 
 
posted @ 2020-07-12 22:56  MGMT_N5983  阅读(368)  评论(0编辑  收藏  举报