实际需求:

因安全漏洞问题,openssh需要升级,
但是Centos6系统仓库里没有最新的rpm包。所以只能手动编译安装openssh最新版本
Centos7系统的就没必要了,仓库自带的版本已经满足要求。目前最新应该是7.4p1.当然如果要编译和6没啥区别。
注意一点就是:7的/etc/rc.d/rc.local 默认无执行权限 ,需要 chmod +x /etc/rc.d/rc.local 然后 /etc/init.d/sshd_7.8 start 写在这里。

参考资料:

https://blog.csdn.net/lqy461929569/article/details/76148598
https://www.xj123.info/7111.html
官方安装指导书:
http://www.linuxfromscratch.org/blfs/view/svn/postlfs/openssh.html

注意事项:

1、需要开启telnet以防ssh服务出问题。
2、重启后ssh服务要能启动
3、防火墙端口注意放行

留好退路

一、升级之前最好先把telnet开起来,防止意外导致ssh无法连接

1、yum install telnet-server 会自己安装xinetd

2、chkconfig --list

openssh-7.8p1编译安装

3、编辑 /etc/xinetd.d/telnet

#sed -r 's/disable([[:space:]])=([[:space:]])no/disable\1=\2yes/g' /etc/xinetd.d/telnet

sed -i '/disable/s/yes/no/g' telnet

让telnet托管给xinetd

4、此时,即可用非root用户进行登录。若要使用root用户登录,一般有以下两种方法(二选一):

(1)mv /etc/securetty /etc/securetty.bak

    PS:网上有说将你的登录终端信息加入到此文件下,通过你的/var/log/secure日志,添加要放行的终端,但是不靠谱,一直在变的,强烈不建议使用。

(2)修改/etc/pam.d/login这个文件,注释下面这一行,
#auth xxxxxxxxx pam_securetty.so 注释这行

    PS:亲测,这个方法不好使,没效果。

注意:ssh测试可以登录后,将上面的2个文件再改回去。

5、验证telnet可以正常登录

准备战斗

一、卸载当前yum安装的openssh相关软件包,避免干扰。

卸载前备份下/etc/init.d/sshd文件,用于自启动。当然自己也可以编辑。编译会自己生成。

rpm -e --nodeps `rpm -qa |grep openssh`

openssh一搬会默认安装三个包

openssh
openssh-clients
openssh-server

rpm -qa openssh* # 检查下是否卸载完了

ss -ntl |grep 22 

二、安装相关依赖包,开始安装。

1)openssh需要依赖openssl。

查看解压的tar包中的INSTALL文件。里边有依赖的包版本信息。
zlib
openssl

cd /tmp
wget https://cloudflare.cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-7.8p1.tar.gz
tar xf openssh-7.8p1.tar.gz
cd openssh-7.8p1

2)编译前查看相关文件,虽然英文不太好,但是很重要。
openssh-7.8p1编译安装

3)就编译安装而言,有三种方式。
1、默认安装方式
2、指定安装目录
3、指定

cat INSTALL

对比下rpm安装后的目录结构。
openssh-7.8p1编译安装
openssh-7.8p1编译安装
1、默认安装
./configure
make
make install
说明:
This will install the OpenSSH binaries in /usr/local/bin, configuration file in /usr/local/etc, the server in /usr/local/sbin, etc.

2、指定安装目录

./configure --prefix=/opt
make
make install

说明:
To specify a different installation prefix, use the --prefix option to configure:
Will install OpenSSH in /opt/{bin,etc,lib,sbin}.

3、指定各个安装目录

./configure --prefix=/opt --sysconfdir=/etc/ssh
make
make install

说明:
You can also override specific paths, for example:
This will install the binaries in /opt/{bin,lib,sbin}, but will place the configuration files in /etc/ssh.

PS:就实际个人体验而言,

第一种和第三种:看着方便,缺点可能就是太分散
第二种:卸载版本方便。删除安装目录即可,绿色安装。缺点需要自己添加一些环境变量,这个我们可以通过stow工具缓解这个缺点。

打扫战场

一、安装后相关设置。

1)指定环境变量

不是默认安装位置,需要做bin文件的PATH变量指定。

cat >/etc/profile.d/openssh.sh <<-"EOF"
#!/bin/bash
openssh_path=/usr/local/app/openssh
PATH="$openssh_path/bin:$openssh_path/sbin:$PATH"
export PATH
EOF

2)服务自启动

sshd启动主要是配置文件。

解压编译的目录下是有自启动脚本的。

openssh-7.8p1编译安装
但是,这个是没有指定chkconfig参数,不能被chkconfig管理自启动。
需要手动添加。
或者去sshd.init文件中将chkconfig这段指定copy到opensshd.init文件中。
openssh-7.8p1编译安装

cp -a openssd.init /etc/init.d/sshd_7.8
chkconfig --add sshd_7.8
chkconfig --list sshd_7.8 默认是开启2,3,4,5级别。

3)添加帮助文档路径。

cat  >> /etc/man.config <<eof
#start custom
MANPATH_MAP     /usr/local/app/openssh/bin                 /usr/local/app/openssh/share/man
MANPATH_MAP     /usr/local/app/openssh/sbin                 /usr/local/app/openssh/share/man
#end custom
eof

4) 修改配置文件、

vim /usr/local/app/openssh/etc/sshd_config
    AddressFamily inet #只监听ipv4地址,不监听ipv6
    PermitRootLogin yes # 允许root用户登录。当然最好不要允许root登录,新的配置文件,优化的已经不错了。

5)重启服务,测试启动脚本的有效性。重启电脑,测试重启后,服务的有效性

service sshd_7.8 restart

6)关闭xinetd服务,删除防火墙规则。还原修改的文件。

service xinetd stop
chkconfig xinetd off
mv /etc/securetty.bak /etc/securetty