linux 下ssh 服務配置

SSH 服務器:


   既然 telnet 不是很安全,那麼我又須要以遠程聯機服務來操控個人 Linux 主機,那麼應該怎麼辦呀!?最好的方法固然就是以較爲安全的聯機機制的方案來解決聯機的問題囉!那麼該如何解決這樣的問題呢?這也不難啦,使用 SSH 便可。那麼 SSH 是什麼呢?他有什麼特異功能?簡單的來講,SSH 是 Secure SHell protocol 的簡寫,他能夠經由將聯機的封包加密的技術,來進行資料的傳遞,所以,資料固然就比較安全囉!這個 SSH 能夠用來取代 Internet 上面較不安全的 finger, R Shell (rcp, rlogin, rsh 等指令), talk 及 telnet 等聯機模式。底下咱們將先簡介一下 SSH 的聯機模式,來講明爲何 SSH 會比較安全呢!

特別注意:這個 SSH 協議,在預設的狀態中,自己就提供兩個服務器功能:

1. 一個就是相似 telnet 的遠程聯機使用 shell 的服務器,亦便是俗稱的 ssh ;

2. 另外一個就是相似 FTP 服務的 sftp-server !提供更安全的 FTP 服務。

· 聯機加密技術簡介:

基本上,加密的技術一般是藉由所謂的『公鑰與私鑰』亦即『Public and Private keys』來進行加密與解密的動做!以下圖所示,當 SSH 激活服務以後,會產生一支公鑰,而身爲我的計算機的你,在進行與 server 的聯機時,能夠藉由本身產生的私鑰來提供 server 的聯機之用,也能夠直接藉由 server 提供的私鑰來進行聯機!這個與進行聯機時選擇的加密版本有關,這個等一下咱們再提!



在上面的圖標中,咱們能夠知道,當數據由 Server 端傳送到 Client 端時,這些資料會先通過『公鑰, Public Key』來進行加密的行爲,因此,在傳輸的過程當中,這些資料自己是通過加密的,所以,即便這些資料在途中被截取時,要破解這些加密的資料,仍是得要花費上 好長一段時間的。那麼等這些通過公鑰加密的資料傳送到 Client 端以後,就能夠藉由所謂的『私鑰, Private Key』來進行解密的動做。須要注意的是,這些公鑰與私鑰在每一部計算機上面都不同,因此,你與 Server 的聯機對其餘人來講,都是很難去破解的呢!那麼這些公鑰與私鑰是如何產生的呢?底下咱們來談一談目前 SSH 的兩種版本的聯機模式囉!

o SSH protocol version 1:


每一部主機均可以使用 RSA 加密方式來產生一個 1024-bit 的 RSA Key ,這個 RSA 的加密方式,主要就是用來產生公鑰與私鑰的演算方法!這個 version 1 的整個聯機的加密步驟能夠簡單的這麼看:

1. 當每次 SSH daemon (sshd) 激活時,就會產生一支 768-bit 的公鑰(或稱爲 server key)存放在 Server 中;

2. 如有 client 端的需求傳送來時,那麼 Server 就會將這一支公鑰傳給 client ,而 Client 藉由比對自己的 RSA 加密方式來確認這一支公鑰;

3. 在 Client 接受這個 768-bit 的 server key 以後,Client 本身也會隨機產生一支 256-bit 的私鑰(host key),而且以加密的方式將 server key 與 host key 整合成一支完整的 Key ,而且將這支 Key 也傳送給 server ;

4. 以後,Server 與 Client 在此次的聯機當中,就以這一支 1024-bit 的 Key 來進行資料的傳遞!
固然啦,由於 Client 端每次的 256-bit 的 Key 是隨機取的,因此你此次的聯機與下次的聯機的 Key 就會不同啦!

o SSH protocol version 2:

與 version 1 不一樣的是,在 version 2 當中將再也不產生 server key 了,因此,當 Client 端聯機到 Server 端時,二者將藉由 Diffie-Hellman key 的演算方式來產生一個分享的 Key ,以後二者將藉由相似 Blowfish 的演算方式進行同步解密的動做!

每個 sshd 都提供這兩個版本的聯機,而決定這兩種模式聯機的,就必須要在 client 端聯機時選擇聯機的模式才能確認。目前預設狀況下,會自動使用 version 2 的聯機模式喔!而因爲咱們的聯機資料中,通過了這個 Public 與 Private Key 的加密、解密動做,因此在中間的傳送過程當中,固然就比較安全的多囉!





































------------------------------------------------------------------------------------------------

激活 ssh 服務:

事實上,在咱們使用的 Linux 系統當中,預設就已經含有 SSH 的全部須要的套件了!這包含了能夠產生密碼等協議的 OpenSSL 套件與 OpenSSH 套件,因此呢,要激活 SSH 真的是太簡單了!就直接給他激活就是了!此外,在目前的 Linux Distributions 當中,都是預設激活 SSH 的,因此一點都不麻煩,由於不用去設定,他就已經激活了!哇!真是爽快~不管如何,咱們仍是得說一說這個激活的方式吧!直接激活就是以 SSH daemon ,簡稱爲 sshd 來激活的,因此,手動能夠這樣激活:



上面兩種方式均可以直接手動激活 sshd 這個服務!而後使用 netstat -tl 看看能不能看到 ssh 的服務在監聽呢!?若是出現了上面那一行×××字體,就表示您的 SSH 已經正確的激活囉!這真是太簡單了吧!沒錯,可是他就是這麼簡單~

那麼我要如何在開機的時候就激活這個 sshd 呢?若是是 Red Hat 的系統,可使用 ntsysv 這支程序,而 Mandrake 可使用 chkconfig 這個程序!至於 OpenLinux 則能夠到 /etc/sysconfig/daemons 去看看喔!

這個方式僅適合在已經有 OpenSSH 的 Linux Distributions 當中,若是以 Red Hat 6.x 爲例,他並無預設使用 SSH 怎麼辦?別擔憂,能夠參考一下底下這個鳥哥以前寫過的網頁,有詳細的說明使用 tarball 安裝的步驟呢!

使用 Tarbal 安裝 SSH 以及升級 SSH 可能會遇到的問題說明

須要注意的是, SSH 不但提供了 shell 給咱們使用,亦便是 ssh protocol 的主要目的,同時亦提供了一個較爲安全的 FTP server ,亦便是 ssh-ftp server 給咱們當成是 FTP 來使用!因此,這個 sshd 能夠同時提供 shell 與 ftp 喔!並且都是架構在 port 22 上面的呢!因此,底下咱們就來提一提,那麼怎麼樣由 Client 端鏈接上 Server 端呢?同時,如何以 FTP 的服務來鏈接上 Server 而且使用 FTP 的功能呢?

















------------------------------------------------------------------------------------------------

· ssh 客戶端聯機: ssh, putty

因爲 Linux 與 Windows 這兩個客戶端的 Client 聯機軟件並不同,因此咱們分爲兩個部分來講明:

o Linux 客戶端:

在 Linux 客戶端方面,咱們主要以 ssh 進行通常聯機,而已 sftp 進行 FTP 的使用聯機!分別簡介以下:



這裏請特別留意的是,若是直接以 ssh hostname 來鏈接進入 hostname 這個主機時,則進入 hostname 這個主機的『賬號名稱』將會是目前你所在的這個環境當中的使用者賬號!以上面爲例,由於我是以 root 的身份在執行,因此若是我執行了『 ssh host.domain.name 』時,那麼對方 host.domain.name 這部主機,就會以 root 的身份來讓我進行密碼確認的登入動做!所以,爲了不這樣的麻煩,一般我都是以簡單的 e-mail 的寫法來登入遠方的主機,例如『ssh user@hostname 』即表示,我是以 user 這個賬號去登入 hostname 這部主機的意思。固然,也可使用 -l username 這樣的形式來書寫!登入對方主機以後,其它的全部執行行爲都跟在 Linux 主機內沒有兩樣~因此,真的是很簡單吧! ^_^ 這樣就能夠達到遠程控管主機的目的了!此外,在預設的狀況下, SSH 是『容許你以 root 的身份登入』喔!呵呵!更是爽快啦!此外,請特別留意的是,當您要鏈接到對方的主機時,若是是首次鏈接,那麼 Server 會問你,你的聯機的 Key 還沒有被創建,要不要接受 Server 傳來的 Key ,並創建起聯機呢?呵呵!這個時候請『務必要輸入 yes 而不是 y 或 Y』,這樣程序纔會接受喔!

那麼如何使用 SSH FTP 的功能呢?也是很容易啦!就是使用 sftp 這支程序便可!而登入的方式與 ssh 相同,都是使用 sftp -l username hostname 或者直接以 sftp user@hosname 來書寫!執行以後會有底下的模樣:



進入到 sftp 以後,那就跟在通常 FTP 模式下的操做方法沒有兩樣了!底下咱們就來談一談, sftp 這個接口下的使用指令吧!




就總體而言, sftp 在 Linux 底下,若是不考慮圖形接口,那麼他已經能夠取代 FTP 了呢!由於全部的功能都已經涵蓋啦!所以,在不考慮到圖形接口的 FTP 軟件時,能夠直接關掉 FTP 的服務,而改以 sftp-server 來提供 FTP 的服務吧! ^_^

o Windows 客戶端:

在 Linux 底下已經有 ssh 了,那麼若是在 Windows 底下呢?該怎麼辦?呵呵!這個能夠直接使用 putty 這種類型的聯機軟件呢,他也是免費的軟件喔!取得的方式能夠參考底下的網站:
[url]http://www.chiark.greenend.org.uk/~sgtatham/putty/[/url]

好了,那麼要取得哪幾個程序呢?其實只要 putty.exe 及 psftp.exe 這兩支程序就夠了!分別用來登陸 shell 及 FTP 的呢!

o putty:

直接在 Windows 底下執行,執行的圖標有點像底下這樣:



這個時候請注意,因爲咱們比較喜歡將固定的幾個主機的IP記錄下來,因此在這裏咱們須要先進行一些基本的設定才行!在上圖中,咱們須要填寫:

(1)HostName(or IP address) 那一項,及

(2)Saved Sessions 取個好記的名字,

(3)而且選擇 SSH 那個選項才行!

以個人區域內網絡爲例,我能夠寫成這個模樣:



請千萬記得,填寫完畢以後,必定要按下右邊的『Save』按鍵,這樣你的設定纔會被記錄下來喔!接着下來,咱們要設定的是每次登入的時候,都會進行記錄 的項目,因此,你能夠在左邊的畫面上面按下『Logging』而後將右邊的『Always append to the end of it』,這樣纔不會每次登入的時候,系統都要問你一次,是否須要記錄!



接着下來,咱們還能夠調整整個 putty 的屏幕大小呢!如下圖爲例,我設定個人登入畫面爲 40 行與 100 個字符!這樣的畫面比起傳統的 24 * 80 要大的多,看起來也比較舒服就是了~那麼那個 1000 表示個人滾動條有 1000 行的紀錄,能夠方便我往前查詢呢!



調整完了屏幕的大小以後,再來這是最重要的:『你要以第幾個 SSH version 進入?!』前面說過,咱們預設是以 version2 來登入的,因此這裏咱們能夠調整爲 2 那個項目!這樣每次登入都會以 version 2 的模式登入主機了!



好了,已經都設定完畢了,再來固然又是要記錄囉!因此請回到『Session』的設定裏面,再按下一次『Save』,這個時候在中間的大框框就會出現你 輸入的記錄名稱,而後,之後要登入 SSH 主機時,就直接給他點兩下 test.linux.org 那個(就是你剛剛自行設定的紀錄名稱),就能夠進入你所點選的主機囉!



整個 putty 大體上的流程就是這樣!如此一來,您就能夠在 Windows 上面以 SSH 的協議,登入遠程的 Linux 主機嚕!粉方便吧! ^_^ !若是還要其它的設定,那麼就直接修改 Saved Sessions 與 HostName 這兩個項目,而後再次給他 Save ,嘿嘿!就又多一個設定值了!並且仍是跟剛剛的設定值相同!很容易設定的啦!

o psftp:


這一支程序的重點則是在於以 sftp 聯機上 Server 。聯機的方式能夠直接點選 psftp 這個檔案,讓他直接激活,則會出現下面的圖樣:



這個時候能夠填入你要鏈接上去的主機名稱,例如個人區域內網絡 test.linux.org 這個主機:



呵呵!這樣就登入主機啦!很簡單吧!而後其它的使用方式跟前面提到的 sftp 同樣哩!加油的使用吧!














































































------------------------------------------------------------------------------------------------

詳細設定 sshd 服務器


基本上,全部的 ssh 相關設定都放在 /etc/ssh/sshd_config 裏面!不過,每一個 Linux distribution 的預設設定都不太相同,因此咱們有必要來了解一下整個設定值的意義爲什麼纔好!







基本上,在你的系統中,『除非有必要,不然請不要更改 /etc/ssh/sshd_config 這個檔案的設定值!』由於預設的狀況下一般都是最嚴密的 SSH 保護了,所以,能夠不須要更動他!上面的說明僅是在讓你們瞭解每一個細項的一些基本內容而已!須要注意的是最後一項,若是您不肯意開放 SFTP 的話,將最後一行批註掉便可!

另外,若是你修改過上面這個檔案(/etc/ssh/sshd_config),那麼就必須要從新激活一次 sshd 這個 daemon 才行!亦便是: /etc/rc.d/init.d/sshd restart














------------------------------------------------------------------------------------------------

· 製做不用密碼可當即登入的 ssh 用戶:


咦!既然 SSH 可使用 Key 來比對資料,而且提供使用者資料的加密功能,那麼可不可能利用這個 Key 就提供使用者本身進入主機,而不須要輸入密碼呢?呵呵!好主意!咱們能夠將 Client 產生的 Key 給他拷貝到 Server 當中,因此,之後 Client 登入 Server 時,因爲二者在 SSH 要聯機的訊號傳遞中,就已經比對過 Key 了,所以,能夠當即進入數據傳輸接口中,而不須要再輸入密碼呢!在實做上的步驟能夠是:

1. 首先,先在 Client 上面創建 Public Key 跟 Private Key 這兩把鑰匙,利用的指令爲 ssh-keygen 這個命令;

2. 再來,將 Private Key 放在 Client 上面的家目錄,亦即 $HOME/.ssh/ ,而且修改權限爲僅有該 User 可讀的狀態;

3. 最後,將那把 Public Key 放在任何一個你想要用來登入的主機的 Server 端的某 User 的家目錄內之 .ssh/ 裏面的認證檔案便可完成整個程序。

說是好象很困難的樣子,其實步驟真的很簡單,咱們依序來進行做業好了!

假設前提:


a. Server 部分爲 test.linux.org 這部 192.168.0.2 的主機,欲使用的 User 爲 test 這個賬號;

b. Client 部分爲 test2.linux.org 這部 192.168.0.100 PC 的 test2 這個賬號,他要用來登入
192.168.0.2 這部主機的 test 這個賬號。

也就是說,我在 192.168.0.100 這部機器的身份爲 test2 ,可是我想以 test 的身份登入 192.168.0.2 這部主機,而且但願不要使用密碼!這樣能夠了解大前提了嗎?好了,咱們就一步一步來做吧!

1. 在 Client 端創建 Public 與 Private Key :

創建的方法真的是簡單到不行!直接在 192.168.0.100 這個 Client 上面,以 test2 這個賬號,使用 ssh-keygen 這個指令來進行 Key 的產生便可!不過,須要注意的是, version 1 與 version 2 使用的密碼演算方式不一樣,此外, version 2 提供兩個密碼演算的方法,咱們這裏僅針對 version 2 的 RSA 這個演算方法進行說明!



請注意上面喔,個人身份是 test2 ,因此當我執行 ssh-keygen 時,纔會在個人家目錄底下的 .ssh/ 這個目錄裏面產生所須要的兩把 Keys ,分別是私鑰(id_rsa)與公鑰(id_rsa.pub)。另一個要特別注意的就是那個 id_rsa 的檔案權限啦!他必需要是 -rw------- 纔好!不然內容被人家知道了,那麼你的 Keys 不就有可能外泄了?因此請特別留意他的權限喔!那麼那個 id_rsa.pub 則是『公鑰!』這個檔案必需要被放置到 Server 端才行!

2. 在 Client 端放置私鑰:

在預設的條件中,咱們的私鑰必須要放置在家目錄底下的 .ssh 裏面,那麼若是是 version 2 的 RSA 算法,就須要放置在 $HOME/.ssh/id_rsa 當中!咦!恰好使用 ssh-keygen 就是已經產生在這個目錄下了,因此天然就不須要去調整他了!以個人 test2.linux.org 來看,那麼個人檔案就會放置在 /home/test2/.ssh/id_rsa 這個檔案就是私鑰啦!

3. 在 Server 端放置能夠登入的公鑰:

既然咱們要讓 test2 能夠以 test 這個賬號登入 test.linux.org 這部主機,那麼這部主機天然須要保有 test2 的 public key 囉!對的!因此咱們必須要將 Client 端創建的 id_rsa.pub 檔案給他拷貝到 test.linux.org 裏頭的 test 這個使用者的家目錄之下!那麼若是你還記得上面的 sshd_config 這個檔案的設定的話,那麼應該就記得『AuthorizedKeysFile』這個設定吧!是的!在被登入的主機的某個賬號,他的公鑰放置的文件名稱預設 就是這個項目所記載的!而他預設的檔名就是 authorized_keys 這個文件名稱啦!那麼應該怎麼作呢?






































   請注意上面的機器!因爲 authorized_keys 能夠保存至關多的公鑰內容,所以,可使用 >> 的方式來將 Client 端的公鑰新增到該檔案內!呵呵!作完這一步一後,將來 test2 就能夠直接在 test2.linux.org 以



這樣就能夠不須要輸入密碼囉!可是請注意, test 不能以 test2 登入 test2.linux.org 喔!

很簡單的步驟吧!這樣一來,就能夠不需密碼的手續了!不管如何,你要記得的是, Server 須要有的是 Public Keys ,而 Client 端的則是 Private Keys !則將來,當你還想要登入其它的主機時,只要將你的 public key ( 就是 id_rsa.pub 這個檔案 )給他 copy 到其它主機上面去,而且新增到某賬號的 .ssh/authorized_keys 這個檔案中!哈哈!成功!







------------------------------------------------------------------------------------------------

· 安全設定:


好了,那麼關於安全的設定方面,有沒有什麼值得注意的呢?固然是有啦!咱們能夠先建議幾個項目吧!分別能夠由:

o /etc/ssh/sshd_config

o /etc/hosts.allow, /etc/hosts.deny

o iptables

這三方面來着手進行!底下咱們就說一說吧!

· /etc/ssh/sshd_config


通常而言,這個檔案的預設項目就已經很完備了!因此,事實上是不太須要更動他的!可是,若是您有些使用者方面的顧慮,那麼能夠這樣修正一些問題呢!

o 禁止 root 的登入:任什麼時候候,不準 root 以遠程聯機的方式登入,都會是一個好主意!因此這裏蠻建議你們直接將 root 的登入權限拿掉吧!因此,能夠修改 /etc/ssh/sshd_config 這個檔案的內容爲:



如此一來,之後 root 就不能以 ssh 登入囉!這樣仍是比較好的啦! ^_^

o 不準某個羣組登入:有些特殊狀況中,咱們想要讓使用者只能使用 sendmail, pop3, ftp 等,可是不但願他能夠遠程聯機進來,那麼你能夠這樣作:

1. 將這些使用者都概括在某一個特殊羣組之下,例如 nossh 這個羣組好了;

2. 在 /etc/ssh/sshd_config 當中加入這一行:『DenyGroups nossh』

3. 從新激活 sshd : /etc/rc.d/init.d/sshd restart
這樣就OK啦!

o 不準某個使用者登入:跟 DenyGroups 相似,使用 DenyUsers 便可!參考 sshd_config 的設定喔!

· /etc/hosts.allow 及 /etc/hosts.deny :


這東西也是很簡單的啦!直接參考: 簡易防火牆架設 一文囉!固然,簡單的方法就是:


· iptables 基本上, SSH 還蠻安全的,只要取消 root 的登入權限,那麼問題應該就會比較小一點啦!因此,雖然能夠不用設定 iptables ,可是建議針對幾個網域設定一下 /etc/hosts.allow 與 /etc/hosts.deny !加油囉!
相關文章
相關標籤/搜索