一、前言
話說在下最近在工作上,遇到一個有趣的問題──就是要把SSH安裝到Solaris 6上面。不過,並不是一開始就下海處理,而是研究別人做到一半的「卡到」的工作。
已知環境中,已經安裝好「perl」、「gcc」、「openssl」、「zlib」和「openssh」套件,而問題出在產生SSH要用到的Key的時候──就是執行「ssh-keygen」指令時,出現「ld.so.1: ssh-keygen: fatal: librt.so.1: open failed: No such file or directory」問題(也就是前人卡住的地方囉)。
而這看似很單純的「動態函式庫」找不到,想不到卻在google中查到人仰馬翻。而當你好不容易從網海中解決這麻煩,可以執行「ssh-keygen」指令時,卻遇上了「PRNG is not seeded」錯誤訊息!
這又代表什麼意義呢?
嗯......後面就來看看Solaris 6安裝SSH時,破解上述問題的「Key」是什麼吧! ^^
二、讓人暈倒的「動態函式庫── librt.so.1 」找不到(not found)問題解決
關於這問題,我們先來看看,環境中已經安裝好的SSH會用到哪些動態函式庫連結吧!
| #>ldd /usr/local/bin/ssh libresolv.so.2 => /usr/lib/libresolv.so.2 libcrypto.so.0.9.8 => /usr/local/ssl/lib/libcrypto. librt.so.1 => (file not found) libz.so => /usr/local/lib/libz.so libsocket.so.1 => /usr/lib/libsocket.so.1 libnsl.so.1 => /usr/lib/libnsl.so.1 libc.so.1 => /usr/lib/libc.so.1 libdl.so.1 => /usr/lib/libdl.so.1 libgcc_s.so.1 => /usr/local/lib/libgcc_s.so.1 libmp.so.2 => /usr/lib/libmp.so.2 /usr/platform/SUNW,Ultra-60/ |
不知道大家發現了沒?所有函式庫都很好處理,但是,偏偏就是有一個「librt.so.1」沒有存在於檔案系統內!
不過,這問題很好解決──原來針對Solaris這個函式庫功能來說,Solaris 6的「libposix4」就等同於Solaris 8上的「librt」。
所以,我們只要用個簡單的soft link,就可以解決那問題(不用發狂去找「librt」到底是從哪個套件而來喔)!
使用指令如下(請先用root登入Solaris喔)所示:
|
#> cd /usr/local/lib #> ln -s /usr/lib/libposix4.so.1 librt.so.1 |
然後再確定一下目前所有該用到的函式庫SSH是否能找到。
|
#>ldd /usr/local/bin/ssh |
接下來,跑一次「ssh-keygen」指令看看......
|
#>ssh- |
沒錯,這回訊息不太一樣,那該如何解決「PRNG is not seeded」呢?
三、搬開最後的「大石頭」,關於SSH執行時出現「PRNG is not seeded」的解決方法
這個問題,主要是SSH會利用一個虛擬的「random」裝置,然而,很不幸的地方是,這樣的裝置,在Solaris 6上需要「自己創造」── 也就是安裝「prngd」套件。
雖然有其他站台會建議安裝其他「第三方軟體」(也就是非官方的支援套件)來解決,不過,「sunfreeware」就能找到「prngd」,自然就不用考慮可能會有風險存在的「第三方軟體」了!
OK,接下來看解決這問題的步驟(一樣用root登入Solaris)......
1.先到「sunfreeware」網站,把「prngd」套件下載回來。
2.解壓縮下載回來的套件後安裝之。
|
#> gunzip prngd-*-sol26-sparc-local.gz #> pkgadd -d ./prngd-*-sol26-sparc-local all |
3.建立啟動「prngd」的scripts「/etc/init.d/prngd」。
|
#> vi /etc/init.d/prngd |
4. 變更「/etc/init.d/prngd」檔案擁有者、群組和權限。
|
#> chown root:sys /etc/init.d/prngd #> chmod 744 /etc/init.d/prngd #> ls -l /etc/init.d/prngd |
5.Link 「/etc/init.d/prngd」到「/etc/rc2.d」目錄下,讓其一開機就啟動 。
|
#> ln -s /etc/init.d/prngd /etc/rc2.d/S98prngd |
6.啟動prngd。
|
#> /etc/init.d/prngd start |
7.Link random裝置。
|
#> ln -s /var/spool/prngd/pool /dev/egd-pool |
8.之後應該就能正常建立SSH的Key了!
|
#> ssh- #>ssh- #>ssh- |
這裡面比較關鍵的步驟在第七項的Link,也是「sunfreeware」網站提到的建議步驟喔!
原則上,只要「prngd」有安裝、啟動成功(在下剛好遇到前人沒有裝prngd,只好很辛苦的自己裝囉),加上這Link就可以解決「PRNG is not seeded」問題了!
四、問題解決之後的後續安裝步驟
到這裡,有個地方要注意,那就是prngd必須要比SSH先啟動!
所以,在下的後續SSH安裝處理步驟為:
|
#> vi /etc/init.d/sshd |
經過這樣的處理,Solaris 6上的SSH應該就能正常動作了! ^^
那......測試一下吧!
#> ssh solaris6_sparc
The authenticity of host 'solaris6_sparc (192.168.10.13)' can't be established.
RSA key fingerprint is A9:c5:32:7B:51:0d:G7:U1:23:7a:dd
Are you sure you want to continue connecting (yes/no)?



