Linux SSH

言:

  • 不知道您有沒有發現,最近的 Linux 套件中,都將 telnet的功能自『預設啟動』的條件,改為需要由使用者開啟的狀態?也就是說,Red Hat 在 7.x 版本以後,如果您需要 telnet 的服務,那麼你就必須要自行啟動他,因為他已經被排除在『預設啟動』的服務項目之外了!為什麼呢?這是由於telnet 本身在傳送資料或者是在進行任何工作的時候,都是以『明碼』的狀態來傳送指令,這樣一來,當有心人士以listen 的功能監聽你的資料封包時,那麼你所傳送的資料將會被擷取而遭到竊取了!所以,基本上,那是非常不安全的一種傳輸資料方式!因此,在最近所釋出的Linux 版本中,例如 Red Hat 7.x 版本,他們的 telnet服務就已經不再是『預設啟動』的功能了!
  • 那如果我們要從遠端連線到主機的話,應該怎麼辦?既然使用telnet 這種明碼的方式行不通的話,那麼我們要使用何種方式呢?呵呵,現在有更好的方式來提供喔!那就是使用openssh 這個套件啦!這個 SSH 的服務,最重要的是可以使用『非明碼』的方式來傳送你所鍵入的資料封包,也就是說,你的資料在網路上,即使被監聽而遭竊取了,由於SSH 是一種加密過後的封包,故而即使被竊取了,該資料要經過解密也不是三天兩頭的事情,所以呢,就可以比較安全的工作啦!此外,SSH 同時也提供配合 PAM 的安全模組,與 TCP Wrappers 的封包限制(也就是 /etc/hosts.allow與 /etc/hosts.deny 的機制),因此呢,安全性也就比較高一些囉!此外,最便利的一點是,你可以使用root 的身份經由 ssh 登入你的主機喔!
  • 好了!底下我們就來說一說,要如何將你的 telnet 改成以ssh 來連接呢?由於 Red Hat 7.x 以後,預設的 ssh 是『開啟』的狀態,所以你幾乎不需要任何設定就可以使用ssh 囉,那如果是 Red Hat 6.x 以前的系統呢?那也很簡單的,你只要安裝底下兩個套件(假如您安裝Red Hat 6.x 是以完全安裝為主)就可以囉!
主機系統的SSH 建置:
  • Red Hat 7.x 系統:

由於RedHat7.x系統本身就已經開啟了sshd了,所以你可以直接以ssh來連上你的主機囉!不過,如果沒有正常開啟SSH的話,那樣要如何啟動呢?也是很簡單的,你可以這樣:

    1. 以『/usr/sbin/setup』程式進入setup的話面中;
    2. 選擇『SystemServices』這個項目;
    3. 然後向下移動到『[*]sshd』,將[*]勾選(按下空白鍵即可);
    4. 然後以tab按鍵移動到『OK』按下enter;
  • 這樣就設定完開機啟動了!然後以底下的方式來啟動ssh服務:
    • /etc/rc.d/init.d/sshdstart
  • 來啟動sshd這個服務,要知道有沒有正常的啟動ssh呢?呵呵,只要輸入底下的指令:
    • netstat-a|more
  • 如果一切正常的話,你將會看到類似底下的這一行:
    • tcp00*:ssh*:*LISTEN
  • 那就表示ssh已經成功的啟動了!不過,如果萬一你的Linux系統並沒有安裝ssh這個服務呢?呵呵!那就安裝他吧!其實,ssh這支服務的主要程式稱為openSSH囉!然後,如果您想要重先安裝openssh來提供ssh的服務,那麼RedHat的網站上隨時更新的Errata您就不能不去看看!你可以按底下的連結上去RedHat下載屬於您系統的最新的openssh這個套件!
    • 小紅帽的Errata網頁
  • 然後按下您的RedHat版本,進入後,去尋找openssh字眼的套件,那個就是啦!然後按下連結之後,直接找到屬於您的系統版本,例如我都是直接捉i386的RPM檔案,然後回來以root身份執行:
    • rpm-ivhopenssh*
  • 如果您只是要升級openssh的話,那就使用:
    • rpm-Uvhopenssh*
  • 更有甚者,直接以up2date來升級,(不過會比較慢一些喔!)
    • up2date-iopenssh
  • 升級成功之後,就可以直接的以上面的方式來啟動ssh這個服務了! 
VBird 的經驗
在上一次更新 openSSH 套件的時候,那是因為網路上發表了舊的 openssh可能有些安全方面的問題,所以 VBird 就去更新了,但是沒想到更新完成之後 SSH竟然不會動!當真是嚇了一大跳!後來,找了一些檔案之後,才發現,原來預設的PAM 模組的屬性搞錯了!你可以到 /etc/pam.d 這個目錄下去看一下,會發現 sshd的屬性竟然是 600,與其他的檔案屬性都不同,後來執行了:
chmod 644 sshd
就 OK 囉!如果你也更新之後發現有這個問題,可以參考看看囉!
  • Red Hat 6.x 以前版本的 Linux 啟動 ssh 服務:

好了,那麼要如何的在RedHat6.x以前的版本上執行ssh這個服務呢?其實也是很簡單的,如前所說的,ssh其實是openssh套件的一種,而openssh有使用到openssl這個資料保密的套件,(其實還有其他的套件需要安裝,不過,由於我這裡預設條件是您已經用『完整安裝』來安裝您的Linux系統,所以其他的套件應該都已經安裝完整了才對!)VBird不是很建議使用RPM來安裝openssh,因為在RedHat6.x以前的版本上面安裝openssh的RPM實在是太麻煩了!所以,我們就使用tarball的方式來安裝吧!

  • 下載openssl與openssh:

到哪裡下載呢?直接到他們的網站上去看看相關的訊息吧!到目前為止(2002/01/18),openssh最新版本為3.0.2(2001/12/3釋出),而openssl最新則是0.9.6c(2001/12/21)這個版本:

    • openSSH網站

    openSSL網站

  • 或者您也可以在這裡下載OpenSSH與OpenSSL這兩個檔案。
  • 安裝:

由於openssh會使用到openssl的資料,所以當然需要先安裝openssl之後,在安裝openssh囉:

[root@tsairoot]#cd/usr/local/src

[root@tsaisrc]#tar-zxvf/root/openssh-3.0.2p1.tar.gz

[root@tsaisrc]#tar-zxvf/root/openssl-0.9.6c.tar.gz

[root@tsaisrc]#cdopenssl-0.9.6c

[[email protected]]#./config--prefix=./usr/local/openssl

將資料安裝在/usr/local/openssl這個目錄,這樣安裝的好處是,

往後在移除該套件較為容易!直接移除該目錄就好了!

......

[[email protected]]#make

開始編譯囉!

[root @tsaiopenssl-0.9.6c]# make test測試一下是否正常,應該不會有問題才是!

[root @tsaiopenssl-0.9.6c]# make install

安裝到/usr/local/openssl中囉!安裝好openssl之後,他的函式庫

馬上就自動啟動了!然後開始安裝openssh 吧!

[root @tsaiopenssl-0.9.6c]# cd ../openssh-3.0.2p1

[[email protected]]#./configure--prefix=/usr/local/openssh--with-pam--with-tcp-wrappers

注意喔!上面是同一行喔!--with-pam在加入PAM模組的安全防護,

而--with-tcp-wrappers則是加入TCPWrappers的安全防護囉!

......

[root @tsaiopenssh-3.0.2p1]# cd contrib/redhat

[root@tsairedhat]#cpsshd.pam/etc/pam.d/sshd

這個步驟在將PAM這個安全模組拷貝到PAM的預設路徑去,

也就是/etc/pam.d這個目錄啦!另外,特別注意,sshd

這個檔案的屬性必須為644,而所有人是root才行,

否則 ssh 不會動!!

[root @tsairedhat]# cd ../..

[[email protected]]#make<==編譯

[root @tsaiopenssh-3.0.2p1]# make install 

上面這樣就安裝完畢啦!

  • 啟動:再來就是需要啟動 SSH 這個套件了,你應該可以到/usr/local/openssh 去,進入 /usr/local/openssh/sbin去執行 sshd 這個檔案,也就是:
  •  
    • /usr/local/openssh/sbin/sshd
  • 就完成啟動的程序囉!如果不相信的話,那就執行netstat -a | more看看有沒有 ssh 這個服務吧!
  • 既然啟動了 ssh 那麼 telnet 自然就不需要繼續存在囉!沒錯,因為ssh 可以完全取代 telnet 的功能的!所以呢,請:
  •  
    • vi /etc/inetd.conf
  • 找到底下這一行:
  •  
    • telnet stream  tcp    nowait  root    /usr/sbin/tcpd  in.telnetd
  • 在前面加上一個註解符號『#』就可以啦!然後退出之後,執行:
  •  
    • /etc/rc.d/init.d/inet restart
  • 重新啟動 inet 這個服務,然後以 netstat-a | more 看一下,嘿嘿嘿嘿! telnet的服務就不見了!那我們就可以使用 ssh來取代囉!

用戶端的 SSH連線軟體

  • Linux sysem:

好了,現在我們知道主機可以使用ssh來進行連線的服務,但是怎樣在用戶端(Client)執行連線的軟體呢?哈哈!很簡單,如果你是以Linux系統來連線的話,那麼你應該可以在/usr/bin裡面找到一個ssh的軟體,(如果是使用tarball的話,那麼ssh就會在/usr/local/openssh/bin裡面囉!)你可以這樣來執行連線程式:

    • ssh-lusernamehost.name.domain
  • 假設我要以vbird這個帳號登入一個名為testing.adsldns.org的主機,那麼就以:ssh-lvbirdtesting.adsldns.org來執行登入連線的程序!然後如果是第一次登入的話,你會發現到有一個訊息,告訴你要不要接受一個認證碼,直接選擇yes就可以連線囉!使用ssh最大的另一個好處,root也可以登入喔!
  • Windowssystem:那萬一你是使用 Windows 為 Client 呢?那也沒問題,你可以到PuTTy 的網站上下載 putty 這支程式:
  • 或者是在
這裡下載。這支程式完全不需要安裝,直接以滑鼠雙擊他,就會自動的執行了!

安全性的設定

  • 好了!雖然 openssh 是比較安全沒錯,但是並不是一定安全的!所以,你仍然可以設定一些簡單的安全防護來防止一些問題的發生!其實,說穿了,就是將一些你不想要讓他登入的IP 擋掉他就是了,然後只開放一些可以登入的 IP 就是了!
  • 防火牆:

由於ssh這個服務是開啟在port22,所以你可以使用ipchains或iptables來開放一些你允許的IP以port22進入!

  • TCPWrappers:

如果不會設定ipchains或iptables,那也沒關係!剛剛我們在安裝的時候不是有選擇--with-tcp-wrappers嗎?呵呵,這個時候就派的上用場了!你可以到/etc/hosts.allow去設定你允許的IP連線到你的主機裡面,例如你允許192.168.1.1-192.168.1.255連線到你的主機,那麼你可以:

    • sshd:192.168.1.0/24:Allow
  • 而將其他的IP都擋掉在/etc/hosts.deny當中:
    • sshd:ALL:Deny
  • 如此一來則ssh只會開放給192.168.1.1-255之間的電腦囉!以後要再開放的話,那就再將其他的IP加到/etc/hosts.allow當中去就好囉!
2002/01/01以來統計人數

相关推荐