天天看點

強制更新openssl導緻無法使用SSH(生成ssh公鑰)

大家好,又見面了,我是你們的朋友全棧君。

最近由于工作需求要搭建freeswitch,整個過程比較糾結,遂總結于此留作備忘。

起源

由于我的需求是将freeswitch跑起來,是以先按照freeswitch wiki上的介紹編譯freeswitch,但configure過程便遇到問題:

configure: error: OpenSSL >= 1.0.1e and associated developement headers required

很明顯,系統的openssl版本過于古老, 而安裝freeswitch的編譯和運作需要openssl >= 1.0.0e,第一直覺就是先把openssl更新再說,無盡的折磨從此開始。

坑一:openssl編譯

一般c項目的configure過程中會通過配置–prefix=xxx來設定被編譯lib的安裝目錄,我一般習慣放到/usr/local/xxx,是以openssl也不例外,順利安裝到/usr/local/openssl-1.0.1h目錄下,但freeswitch的configure還是一直提示openssl版本太低:

configure: error: OpenSSL >= 1.0.1e and associated developement headers required

不過很快意識到自己犯了個低級錯誤,編譯預設搜尋的header和lib還是系統自帶的老版本openssl,于是在freeswitch的configure過程中顯示設定openssl的相關路徑:

./configure –prefix=/usr/local CFLAGS=”-I/usr/local/openssl-1.0.1h/include” LDFLAGS=”-L/usr/local/openssl-1.0.1h/lib”

一波未平一波又起,freeswitch的configure過程又抛出libcrypt.so需要recompile with -fPIC,看起來是openssl的config需要指定-fPIC來編譯動态庫,freeswitch通過動态連結的形式依賴openssl相關的庫,于是加上shared和-fPIC後重新configure和make openssl:

./config shared –prefix=/usr/local/openssl-1.0.1h -fPIC

終于freeswitch的configure和make過了,長舒一口氣,但一個更大的坑還在後面。

坑二:openssl連結

原以為freeswitch可以愉快的運作了,事與願違,server無情的抛出以下錯誤:

symbol lookup error: /usr/local/lib/libfreeswitch.so.1: undefined symbol: EVP_aes_128_ctr

看起來是因為預設的sshd是用老版本openssl編譯的,于是想到更新openssh,指定依賴最新版本的openssl,于是一陣download,configure,make,make install,這裡需要注意的是openssh的configure參數配置需要手動指定openssl庫的位址:

./configure –prefix=/usr/local/openssh –sysconfdir=/etc/ssh –with-pam –with-ssl-dir=/usr/local/openssl –with-md5-passwords –mandir=/usr/share/man –with-zlib=/usr/local/zlib

因為考慮到openssh的重要性,覆寫預設的ssh風險比較高,是以選擇先安裝到/usr/local/openssh,然後将/usr/sbin/sshd符号連結到/usr/local/openssh/sbin/sshd中:

首先停止正在運作的sshd服務:service sshd stop

備份老版本sshd檔案,然後删除/usr/sbin/ssh

建立符号連結

啟動sshd服務service sshd start

立馬通過跳闆機ssh登入來測試新版本openssh的效果,一切看起來完美!

總結

糾結了這麼久,最後的效果就兩點:

更新openssl,覆寫預設的老版本openssl,這裡選擇的是覆寫,即安裝到/usr目錄下,因為我沒找到可以讓freeswitch運作時手動指定openssl相關so路徑的辦法。

更新openssh,考慮到風險,先安裝到/usr/local/openssh,然後通過符号連結将/usr/sbin/sshd連結到/usr/local/openssh/sbin/sshd

釋出者:全棧程式員棧長,轉載請注明出處:https://javaforall.cn/129133.html原文連結:https://javaforall.cn