Solaris 6安裝SSH的麻煩和解決 @ 超兩光的電腦工程師 >> 佑子窩 :: 隨意窩 Xuite日誌
  • 喜歡貓,也喜歡狗,現在的工作,就是玩電腦!

    關於Sam,就在這部落格中,希望大家會喜歡這地方! ^^

    和Sam聯絡:phantom2431@hotmail.com 

  • 關鍵字
    1. 沒有新回應!






  • 如何使用RSS
    Powered by Xuite
    2008-09-25 09:00 Solaris 6安裝SSH的麻煩和解決
    平均分數:0 顆星    投票人數:0
    我要評分:

    一、前言

    話說在下最近在工作上,遇到一個有趣的問題──就是要把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.so.0.9.8
           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/lib/libc_psr.so.1

    不知道大家發現了沒?所有函式庫都很好處理,但是,偏偏就是有一個「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
           libresolv.so.2 =>        /usr/lib/libresolv.so.2
           libcrypto.so.0.9.8 =>    /usr/local/ssl/lib/libcrypto.so.0.9.8
           librt.so.1 =>    /usr/local/lib/librt.so.1
           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
           libaio.so.1 =>   /usr/lib/libaio.so.1
           libmp.so.2 =>    /usr/lib/libmp.so.2
           /usr/platform/SUNW,Ultra-60/lib/libc_psr.so.1

    接下來,跑一次「ssh-keygen」指令看看......

     #>ssh-keygen -t rsa1 -f /usr/local/etc/ssh_host_key
    -N ""

         PRNG is not seeded         ← 這回出現新的錯誤訊息了!

    沒錯,這回訊息不太一樣,那該如何解決「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

    #!/bin/sh
    # Start up script for Pseudo Random Number Generator Daemon
    #
    #  placed in /etc/init.d with file name prngd and then as root run
    #  This daemon must run before the sshd start
    #
    # /etc/rc2.d/S98prngd start
    pid=`/usr/bin/ps -e | /usr/bin/grep prngd | /usr/bin/sed -e 's/^  *//' -e
    's/ .*//'`
    case $1 in
    'start')
           /usr/local/sbin/prngd /var/spool/prngd/pool
           ;;
    'stop')
           if [ "${pid}" != "" ]
           then
                   /usr/bin/kill ${pid}
           fi
           ;;
    *)
           echo "usage: /etc/init.d/prngd {start|stop}"
           ;;
    esac

    4. 變更「/etc/init.d/prngd」檔案擁有者、群組和權限。

    #> chown root:sys /etc/init.d/prngd

    #> chmod 744 /etc/init.d/prngd 

    #> ls -l /etc/init.d/prngd
      -rwxr--r--   1 root     sys          567 Sep 24 11:03 /etc/init.d/prng

    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-keygen -t rsa1 -f /usr/local/etc/ssh_host_key -N ""
    Generating public/private rsa1 key pair.

    Your identification has been saved in /usr/local/etc/ssh_host_key.
    Your public key has been saved in /usr/local/etc/ssh_host_key.pub.
    The key fingerprint is:
    The key's randomart image is:
    +--[RSA1 2048]----+
    |        o+o.*=oo.|
    |         o..+A.o.|
    |        o    B...|
    |       o    . =. |
    |        C    . ..|
    |              o. |
    |               ..|
    |                .|
    |                 |
    +-----------------+

    #>ssh-keygen -t rsa  -f /usr/local/etc/ssh_host_rsa_key -N ""
    Generating public/private rsa key pair.
    Your identification has been saved in /usr/local/etc/ssh_host_rsa_key.
    Your public key has been saved in /usr/local/etc/ssh_host_rsa_key.pub.
    The key fingerprint is:
    The key's randomart image is:
    +--[ RSA 2048]----+
    |          +0+=.. |
    |       . o ++. .+|
    |        + . ... *|
    |     . o   .  .+.|
    |      o A     o.B|
    |               o.|
    |                o|
    |                o|
    |                .|
    +-----------------+

    #>ssh-keygen -t dsa  -f /usr/local/etc/ssh_host_dsa_key -N ""
    Generating public/private dsa key pair.
    Your identification has been saved in /usr/local/etc/ssh_host_dsa_key.
    Your public key has been saved in /usr/local/etc/ssh_host_dsa_key.pub.
    The key fingerprint is:
    The key's randomart image is:
    +--[ DSA 1024]----+
    |  .o+=o.*.       |
    | o o+.=..S       |
    |. .o = +*        |
    |. o   +  o       |
    | .      A        |
    |                 |
    |                 |
    |                 |
    |                 |
    +-----------------+

    這裡面比較關鍵的步驟在第七項的Link,也是「sunfreeware」網站提到的建議步驟喔!

    原則上,只要「prngd」有安裝、啟動成功(在下剛好遇到前人沒有裝prngd,只好很辛苦的自己裝囉),加上這Link就可以解決「PRNG is not seeded」問題了!

    四、問題解決之後的後續安裝步驟

    到這裡,有個地方要注意,那就是prngd必須要比SSH先啟動

    所以,在下的後續SSH安裝處理步驟為:

    #> vi /etc/init.d/sshd
    #!/bin/sh

    pid=`/usr/bin/ps -e | /usr/bin/grep sshd | /usr/bin/sed -e 's/^  *//' -e
    's/ .*//'`
    case $1 in
    'start')
           if [ -x /usr/local/sbin/sshd ];then
                   /usr/local/sbin/sshd
           fi
           ;;
    'stop')
           if [ "${pid}" != "" ]
           then
                   /usr/bin/kill ${pid}
           fi
           ;;
    *)
           echo "usage: /etc/init.d/sshd {start|stop}"
           ;;
    esac

    #>chown root:sys /etc/init.d/sshd
    #>chmod 744 /etc/init.d/sshd
    #>ln -s /etc/init.d/sshd /etc/rc2.d/S99sshd   ←剛剛已經把prngd設成"S98",所以要把SSH設成"S99",確保prngd能在開機啟動時,能比SSH先啟動!
    #>/etc/init.d/sshd start

    經過這樣的處理,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:09:8k:gg:d3:d2.
    Are you sure you want to continue connecting (yes/no)?

    Sam / Xuite日誌 / 回應(2) / 引用(0) / 好文轉寄
    回應