实际需求:
因安全漏洞问题,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 写在这里。
官方安装指导书:
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
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)编译前查看相关文件,虽然英文不太好,但是很重要。
3)就编译安装而言,有三种方式。
1、默认安装方式
2、指定安装目录
3、指定
cat INSTALL
对比下rpm安装后的目录结构。
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启动主要是配置文件。
解压编译的目录下是有自启动脚本的。
但是,这个是没有指定chkconfig参数,不能被chkconfig管理自启动。
需要手动添加。
或者去sshd.init文件中将chkconfig这段指定copy到opensshd.init文件中。
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