libressl + ssh 编译安装
总之,在不破坏原操作系统 openssl
+ openssh
,并且没有外网支持的情况下,在 debian
中正常安装了 libressl
+ openssh
的组合,网上给出的大多数方案是直接替换原本的 ssh
服务,不过如果操作不当,会导致 ssh
无法使用,视情况,后果可能很麻烦,所以这里不会影响原 ssh
服务
首先,需要有一台能够正常联网使用的 debian
,才能编译好 libressl
和 openssh
,目标服务器能做的就只是接收拷贝的文件了,所以这里需要在外网编译安装的位置,就是目标服务器上的安装位置
下载
在 libressl
官网下载 libressl ,比如 libressl-3.1.2.tar.gz
在 openssh
官网下载 openssh ,比如这里的 openssh-8.2p1
编译安装 libressl
1 | tar -xf libressl-3.1.2.tar.gz |
新增动态库配置
1 | # root |
文件名不重要,关键在于 /etc/ld.so.conf.d/
目录下创建 .conf
文件,并写下 /opt/libressl/lib
添加到动态库搜索路径中,ldconfig
让该配置生效,这一步不仅需要在当前机器上操作,最终也需要在目标服务器上操作
编译安装 openssh
1 | tar -xf openssh-8.2p1.tar.gz |
configure 之后,正常情况下应该有类似下面的输出
1 | Host: x86_64-pc-linux-gnu |
如果这一步有关于 ssl
相关的错误报出的话,需要检查动态库配置是否有问题,曾经在这里徘徊了很久=。=
如果没有问题就可以继续了
1 | make -j4 |
安装过程基本上就结束了,接下来需要配置 ssh
在别的端口启动
/opt/ssh/etc/sshd_config
修改端口为 23
(不与服务器当前ssh端口相同即可)
1 | Port 23 |
验证安装结果
1 | sudo /opt/ssh/sbin/sshd # 需要超级用户权限,并且使用绝对路径 |
尝试本机登录
1 | ssh -p 23 hellflame@localhost |
输入密码,理论上能够正常登录即可
移植
将两个安装目录打包
1 | sudo tar -cvf ssh.tar /opt/libressl /opt/ssh |
将 ssh.tar
拷贝至目标服务器,恢复 libressl
, ssh
至 /opt
目录
更新动态库配置
1 | # root |
动作和之前相同
启动 sshd
1 | mkdir /var/empty # 大概率需要创建这个目录,然后再启动 |
剩下验证一下新的ssh实例是否可以正常使用
替换原ssh
这一步相对比较危险,搞不好重启之后就无法登录服务器了
此时其实新旧两个版本的ssh都可以正常运行,不一样的是原ssh还有默认的启动脚本支持,所以这里其实只需要先通过新版ssh端口登陆到服务器,更新启动脚本 /etc/init.d/ssh
即可
主要需要更新其中的 ssh配置位置
,可执行文件路径
,不过我实际上并没有操作这一步,而只是简单的关闭了旧ssh服务,这是出于几个考虑
- 防止重启之后新版sshd启动失败,而旧版sshd已经没有启动入口,导致无法登录服务器
- 如果新版sshd由于误操作崩溃,硬重启服务器之后还有旧版服务可以自动启动
- 服务器不可登录风险低
毕竟只要正常使用新端口的ssh服务即可,客户端的默认配置可以通过 $HOME/.ssh/config
文件控制端口使用
当然,走过这一步也没问题,至少以后重启服务器之后都能使用新版本的ssh服务
最后
这里在编译 libressl
和 openssh
的时候都仅展示使用了最简单的配置,或者说移植编译安装中最核心的配置,实际情况中需要根据需要,添加编译参数,当然可能也会带来新的库的安装,这些就要靠每个人自由发挥了
本文作者 : hellflame
原文链接 : https://hellflame.github.io/2020/05/21/ssh-update-with-libressl/
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!