2

libressl + ssh 编译安装

 2 years ago
source link: https://hellflame.github.io/2020/05/21/ssh-update-with-libressl/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

libressl + ssh 编译安装

发布 : 2020-05-21 分类 : basics 浏览 : --

总之,在不破坏原操作系统 openssl + openssh ,并且没有外网支持的情况下,在 debian 中正常安装了 libressl + openssh 的组合,网上给出的大多数方案是直接替换原本的 ssh 服务,不过如果操作不当,会导致 ssh 无法使用,视情况,后果可能很麻烦,所以这里不会影响原 ssh 服务

首先,需要有一台能够正常联网使用的 debian ,才能编译好 libresslopenssh ,目标服务器能做的就只是接收拷贝的文件了,所以这里需要在外网编译安装的位置,就是目标服务器上的安装位置

libressl 官网下载 libressl ,比如 libressl-3.1.2.tar.gz

openssh 官网下载 openssh ,比如这里的 openssh-8.2p1

编译安装 libressl

tar -xf libressl-3.1.2.tar.gz
cd libressl-3.1.2
./configure --prefix=/opt/libressl # 一般习惯把用户软件安装在 /opt, 这也是为了方便移植
make -j4 # 这个过程会比较长
make check
sudo make install # sudo 主要是 /opt 一般普通用户没权限

新增动态库配置

# root
echo /opt/libressl/lib > /etc/ld.so.conf.d/libressl.conf # 重要
ldconfig

文件名不重要,关键在于 /etc/ld.so.conf.d/ 目录下创建 .conf 文件,并写下 /opt/libressl/lib 添加到动态库搜索路径中,ldconfig 让该配置生效,这一步不仅需要在当前机器上操作,最终也需要在目标服务器上操作

编译安装 openssh

tar -xf openssh-8.2p1.tar.gz
cd openssh-8.2p1
./configure --prefix=/opt/ssh --with-ssl-dir=/opt/libressl # 指定ssh安装路径,以及libressl路径

configure 之后,正常情况下应该有类似下面的输出

              Host: x86_64-pc-linux-gnu
Compiler: cc
Compiler flags: -g -O2 -pipe -Wno-error=format-truncation -Wall -Wpointer-arith -Wuninitialized -Wsign-compare -Wformat-security -Wsizeof-pointer-memaccess -Wno-pointer-sign -Wno-unused-result -Wimplicit-fallthrough -fno-strict-aliasing -D_FORTIFY_SOURCE=2 -ftrapv -fno-builtin-memset -fstack-protector-strong -fPIE
Preprocessor flags: -I/opt/libressl/include -D_XOPEN_SOURCE=600 -D_BSD_SOURCE -D_DEFAULT_SOURCE
Linker flags: -L/opt/libressl/lib -Wl,-z,relro -Wl,-z,now -Wl,-z,noexecstack -fstack-protector-strong -pie
Libraries: -lcrypto -ldl -lutil -lz -lcrypt -lresolv

如果这一步有关于 ssl 相关的错误报出的话,需要检查动态库配置是否有问题,曾经在这里徘徊了很久=。=

如果没有问题就可以继续了

make -j4
make tests # 时间比较久,不过应该是值得的
sudo make install

安装过程基本上就结束了,接下来需要配置 ssh 在别的端口启动

/opt/ssh/etc/sshd_config 修改端口为 23 (不与服务器当前ssh端口相同即可)

Port 23

验证安装结果

sudo /opt/ssh/sbin/sshd  # 需要超级用户权限,并且使用绝对路径

尝试本机登录

ssh -p 23 hellflame@localhost

输入密码,理论上能够正常登录即可

将两个安装目录打包

sudo tar -cvf ssh.tar /opt/libressl /opt/ssh

ssh.tar 拷贝至目标服务器,恢复 libressl , ssh/opt 目录

更新动态库配置

# root
echo /opt/libressl/lib > /etc/ld.so.conf.d/libressl.conf # 重要
ldconfig

动作和之前相同

启动 sshd

mkdir /var/empty  # 大概率需要创建这个目录,然后再启动

/opt/ssh/sbin/sshd

剩下验证一下新的ssh实例是否可以正常使用

替换原ssh

这一步相对比较危险,搞不好重启之后就无法登录服务器了

此时其实新旧两个版本的ssh都可以正常运行,不一样的是原ssh还有默认的启动脚本支持,所以这里其实只需要先通过新版ssh端口登陆到服务器,更新启动脚本 /etc/init.d/ssh 即可

主要需要更新其中的 ssh配置位置可执行文件路径 ,不过我实际上并没有操作这一步,而只是简单的关闭了旧ssh服务,这是出于几个考虑

  1. 防止重启之后新版sshd启动失败,而旧版sshd已经没有启动入口,导致无法登录服务器
  2. 如果新版sshd由于误操作崩溃,硬重启服务器之后还有旧版服务可以自动启动
  3. 服务器不可登录风险低

毕竟只要正常使用新端口的ssh服务即可,客户端的默认配置可以通过 $HOME/.ssh/config 文件控制端口使用

当然,走过这一步也没问题,至少以后重启服务器之后都能使用新版本的ssh服务

这里在编译 libresslopenssh 的时候都仅展示使用了最简单的配置,或者说移植编译安装中最核心的配置,实际情况中需要根据需要,添加编译参数,当然可能也会带来新的库的安装,这些就要靠每个人自由发挥了


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK