Ubuntu 系统用源码包升级openssh
环境:Ubuntu 14.04
目的:openssh版本6.6升级为openssh7.9(8.1),解决漏洞问题
准备以下3个包

http://www.zlib.net/
https://www.openssl.org/source/
http://www.openssh.com/portable.html
ssh -V
which opensslopenssl version -a
避免升级出现错误导致ssh服务挂掉,会导致一系列的麻烦事,所以提前再启动一个sshd或安装telnet服务
sshd:
# /usr/sbin/sshd -d -p 2222 (-d debug -p 指定以2222端口再启动一个新的sshd)
# /usr/sbin/sshd -p 2222
/usr/sbin/sshd -E /var/log/secure -p 2222 -D (-E指定日志文件 -D后台运行)
ssh -p 2222 user@host
telnetd:
|
1
2
3
4
|
apt-get install openbsd-inetd telnetd telnet/etc/init.d/openbsd-inetd restart # 启动服务netstat -anpt|grep 23 # 查看telnet服务的默认端口是否启动telnet ip # 测试是否成功登陆 |
此处可能会遇到:安装telnet 后,root登录时总是提示 login incorrect
vim /etc/pam.d/login 注释文件中的32行即可 备注:(最好是添加一个普通用户,然后使用普通用户登录再切换到root用户,因为Telnet是明文显示的,不安全)

|
1
2
3
4
|
上传zlib源码到服务器的任意目录,并解压tar xf zlib-1.2.11.tar.gz./configure --prefix=/usr/local/zlibmake -j 4 && make install |
更新动态链接数据库
|
1
2
|
echo "/usr/local/zlib/lib" >> /etc/ld.so.confldconfig -v |
编译安装openssl
|
1
2
3
4
5
6
|
tar -zxf openssl-1.1.0k.tar.gz && cd openssl-1.1.0k./config shared && make -j 8 && make installrm -rf /usr/bin/openssl /usr/include/openssl
ln -s /usr/local/bin/openssl /usr/bin/openssl (注意此处软链接需要按住实际路径)ln -s /usr/local/include/openssl /usr/include/openssl(注意此处软链接需要按住实际路径)echo "/usr/local/ssl/lib" > /etc/ld.so.conf.d/openssl.confldconfig -v |
查询openssl版本号
openssl version -a

编译安装openssh
解决启用Pam依赖
apt-get install libpam0g-dev -y
|
1
2
3
4
5
6
|
mv /etc/ssh /etc/ssh_bak (备份该目录)mv /etc/init.d/ssh /etc/init.d/ssh_bak (备份该目录)apt-get autoremove openssh-server openssh-client openssh-sftp-server
tar xf openssh-7.9p1.tar.gzcd openssh-7.9p1/./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-zlib=/usr/local/zlib --with-ssl-dir=/usr/local --with-privsep-path=/var/lib/sshdmake -j 8 && make install |
执行ssh -V验证是否升级成功

拷贝源文件目录中的sshd.init
|
1
|
cp -p contrib/redhat/sshd.init /etc/init.d/sshd |

vim /etc/ssh/sshd_config 修改配置中的以下参数,使之和原来配置信息保持一致
|
1
2
3
|
Port 22#PermitRootLogin prohibit-passwordPermitRootLogin yes |
|
1
|
ln -s /lib/lsb/init-functions /etc/init.d/functions |
重启service sshd restart,此处可以看到一个command not found的报错,经过验证该报错不影响ssh服务启动,暂时没找到原因,经验证ubuntu 16.04 及以上版本系统中没有此问题。猜测是/etc/init.d/sshd配置文件中某个参数不对:. /etc/init.d/functions,49行直接改为$SSHD
# mkdir /var/lock/subsys/

执行以下命令查询ssh服务是否正常启动
ps -ef | grep ssh

netstat -lnutp|grep sshd
加入开机启动项
update-rc.d -f sshd defaults
测试sshd服务是否可以正常连接
ssh ip
sshd服务测试通过后,卸载Telnetd服务并删除临时用户
apt-get remove openbsd-inetd telnetd telnet --purge -y
userdel sshtemp
参考:
https://www.cnblogs.com/caidingyu/p/11126852.html
https://sre.ink/ubuntu18-04-update-to-openssh8-0p1/
浙公网安备 33010602011771号