Ubuntu 14.04中如何让OpenSSH关联已安装的新版OpenSSL?
问题:升级OpenSSL后OpenSSH仍关联旧版本
我的Ubuntu 14.04服务器初始安装了OpenSSH 6.6和OpenSSL 1.0.1f,先通过以下命令升级了OpenSSH:
sudo apt install -y build-essential libssl-dev zlib1g-dev wget "https://mirror.edgecast.com/pub/OpenBSD/OpenSSH/portable/openssh-7.4p1.tar.gz" tar xfz openssh-7.4p1.tar.gz cd openssh-7.4p1 ./configure make sudo make install && sudo service ssh restart && ssh -V
执行后输出:
OpenSSH_7.4p1, OpenSSL 1.0.1f
之后单独升级了OpenSSL:
sudo wget "https://www.openssl.org/source/openssl-1.0.2n.tar.gz" tar xfz openssl-1.0.2n.tar.gz cd openssl-1.0.2n/ ./config make sudo make install
执行后运行openssl version得到:
OpenSSL 1.0.2n
但ssh -V仍显示:
OpenSSH_7.4p1, OpenSSL 1.0.1f
请问如何让ssh -V返回OpenSSH_7.4p1, OpenSSL 1.0.2n?
解决方案
OpenSSH在编译阶段会绑定使用的OpenSSL库,你之前编译OpenSSH时调用的是系统默认的旧版OpenSSL,后续升级OpenSSL不会自动更新已编译完成的SSH程序,必须重新编译OpenSSH并指定新OpenSSL的安装路径。
具体操作步骤:
- 确认新OpenSSL的安装路径
默认编译安装的OpenSSL通常位于/usr/local/ssl,可通过以下命令验证:
ls -l /usr/local/ssl/
- 清理旧编译文件
回到之前的OpenSSH源码目录,清理上次编译生成的文件:
cd openssh-7.4p1 sudo make clean
- 重新配置编译参数
指定新的OpenSSL路径进行配置:
./configure --with-ssl-dir=/usr/local/ssl
如果需要覆盖系统默认的SSH安装路径,可添加--prefix=/usr参数。
- 重新编译并安装
make sudo make install
- 重启服务并验证版本
sudo service ssh restart ssh -V
此时ssh -V应该会显示OpenSSH_7.4p1, OpenSSL 1.0.2n。
额外注意事项
- 如果系统无法找到新的OpenSSL库,执行以下命令更新库缓存:
sudo ldconfig
- 若编译时出现依赖错误,重新确认依赖包是否安装完整:
sudo apt install -y libssl-dev zlib1g-dev
内容的提问来源于stack exchange,提问作者nano_dorado
相关产品推荐
相关产品推荐

