主題: ssh使用
查看單個文章
舊 2004-10-09, 09:56 AM   #1
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設 ssh使用

介紹SSH

什麼是SSH?

傳統的網路服務程序,如:ftp、pop和telnet在本質上都是不安全的,因為它們在網路上用明文傳送密碼和資料,別有用心的人非常容易就可以截獲這些密碼和資料。而且,這些服務程序的安全驗證方式也是有其弱點的,就是很容易受到"中間人"(man-in-the-middle)這種方式的攻擊。



所謂"中間人"的攻擊方式,就是"中間人"冒充真正的服務器接收你的傳給服務器的資料,然後再冒充你把資料傳給真正的服務器。服務器和你之間的資料傳送被"中間人"一轉手做了手腳之後,就會出現很嚴重的問題。



SSH的英文全稱是Secure SHell。通過使用SSH,你可以把所有傳輸的資料進行加密,這樣"中間人"這種攻擊方式就不可能實現了,而且也能夠防止DNS和IP欺騙。還有一個額外的好處就是傳輸的資料是經過壓縮的,所以可以加快傳輸的速度。



SSH有很多功能,它既可以替代telnet,又可以為ftp、pop、甚至ppp提供一個安全的"通道"。


最初SSH是由芬蘭的一家公司開發的。但是因為受版權和加密算法的限制,現在很多人都轉而使用OpenSSH。OpenSSH是SSH的替代軟體,而且是免費的,可以預計將來會有越來越多的人使用它而不是SSH。


SSH是由客戶端和服務端的軟體組成的,有兩個不相容的版本分別是:1.x和2.x。用SSH 2.x的客戶程序是不能連線到SSH 1.x的服務程序上去的。OpenSSH 2.x同時支持SSH 1.x和2.x。

SSH的安全驗證是如何工作的

從客戶端來看,SSH提供兩種層次的安全驗證。


第一種等級(關於密碼的安全驗證)只要你知道自己帳號和密碼,就可以登入到遠端主機。所有傳輸的資料都會被加密,但是不能保證你正在連接的服務器就是你想連接的服務器。可能會有別的服務器在冒充真正的服務器,也就是受到"中間人"這種方式的攻擊。


第二種等級(關於密匙的安全驗證)需要依靠密匙,也就是你必須為自己新增一對密匙,並把公用密匙放在需要訪問的服務器上。如果你要連線到SSH服務器上,客戶端軟體就會向服務器發出請求,請求用你的密匙進行安全驗證。


服務器收到請求之後,先在你在該服務器 的家目錄下尋找你的公用密匙,然後把它和你傳送過來的公用密匙進行比較。如果兩個密匙一致,服務器就用公用密匙加密"質詢"(challenge)並把它傳送給客戶端軟體。客戶端軟體收到"質詢"之後就可以用你的私人密匙解密再把它傳送給服務器。


用這種方式,你必須知道自己密匙的密碼。但是,與第一種等級相比,第二種等級不需要在網路上傳送密碼。

第二種等級不僅加密所有傳送的資料,而且"中間人"這種攻擊方式也是不可能的(因為他沒有你的私人密匙)。


但是整個登入的程序可能需要10秒。

安裝並測試OpenSSH

因為受到美國法律的限制,在很多Linux的發行版中都沒有包括OpenSSH。但是,可以從網路上下載並安裝OpenSSH(有關OpenSSH的安裝和組態請參考:


http://www.linuxaid.com.cn/engineer/brimmer/html/OpenSSH.htm)。
安裝完OpenSSH之後,用下面指令測試一下:

ssh -l [your accountname on the remote host] [addres
s of the remote host]
如果OpenSSH工作正常,你會看到下面的提示訊息:


The authenticity of host [hostname] can't be established.
Key fingerprint is 1024 5f:a0:0b:65:d3:82:df:ab:44:62:6d:98:9c:fe:e9:52.
Are you sure you want to continue connecting (yes/no)?

OpenSSH告訴你它不知道這台主機,但是你不用擔心這個問題,因為你是第一次登入這台主機。按鍵輸入"yes"。這將把這台主機的"識別標記"加到"~/.ssh/know_hosts"文件中。第二次訪問這台主機的時候就不會再顯示這條提示訊息了。


然後,SSH提示你輸入遠端主機上你的帳號的密碼。輸入完密碼之後,就建立了SSH連接,這之後就可以像使用telnet那樣使用SSH了。

SSH的密匙

產生你自己的密匙對

產生並分發你自己的密匙有兩個好處:


1) 可以防止"中間人"這種攻擊方式
2) 可以只用一個密碼就登入到所有你想登入的服務器上
用下面的指令可以產生密匙:


ssh-keygen
如果遠端主機使用的是SSH 2.x就要用這個指令:
ssh-keygen -d
在同一台主機上同時有SSH1和SSH2的密匙是沒有問題的,因為密匙是存成不同的文件的。
ssh-keygen指令執行之後會顯示下面的訊息:
Generating RSA keys: ............................ooooooO......ooooooO
Key generation complete.
Enter file in which to save the key (/home/[user]/.ssh/identity):
[按下ENTER就行了]
Created directory '/home/[user]/.ssh'.
Enter passphrase (empty for no passphrase):
[輸入的密碼不會顯示在螢幕上]

Enter same passphrase again:
[重新輸入一遍密碼,如果忘記了密碼就只能重新產生一次密匙了]
Your identification has been saved in /home/[user]/.ssh/identity.
[這是你的私人密匙]


Your public key has been saved in /home/[user]/.ssh/identity.pub.
The key fingerprint is: 2a:dc:71:2f:27:84:a2:e4:a1:1e:a9:63:e2:fa:a5:89 [user]@[local machine]
"ssh-keygen -d"做的是幾乎同樣的事,但是把一對密匙存為(預設值情況下)"/home/[user]/.ssh/id_dsa"(私人密匙)和"/home/[user]/.ssh/id_dsa.pub"(公用密匙)。


現在你有一對密匙了:公用密匙要分發到所有你想用ssh登入的遠端主機上去;私人密匙要好好地保管防止別人知道你的私人密匙。用"ls -l ~/.ssh/identity"或"ls -l ~/.ssh/id_dsa"所顯示的文件的訪問權限必須是"-rw-------"。



如果你懷疑自己的密匙已經被別人知道了,不要遲疑馬上產生一對新的密匙。當然,你還要重新分發一次公用密匙。

分發公用密匙

在每一個你需要用SSH連接的遠端服務器上,你要在自己的家目錄下新增一個".ssh"的子目錄,把你的公用密匙"identity.pub" 拷貝到這個目錄下並把它重新命名為"authorized_keys"。然後執行:
chmod 644 .ssh/authorized_keys
這一步是必不可少的。如果除了你之外別人對"authorized_keys"文件也有寫的權限,SSH就不會工作。


如果你想從不同的電腦登入到遠端主機,"authorized_keys"文件也可以有多個公用密匙。在這種情況下,必須在新的電腦上重新產生一對密匙,然後把產生的"identify.pub"檔案拷貝並貼上到遠端主機的"authorized_keys"文件裡。當然在新的電腦上你必須有一個帳號,而且密匙是用密碼保護的。有一點很重要,就是當你取消了這個帳號之後,別忘了把這一對密匙刪掉。

組態SSH

組態客戶端的軟體

OpenSSH有三種組態方式:指令行參數、使用者設定檔和系統級的組態文件("/etc/ssh/ssh_config")。


指令行參數優先於組態文件,使用者設定檔優先於系統組態文件。所有的指令行的參數都能在組態文件中設定。因為在安裝的時候沒有預設值的使用者設定檔,所以要把"/etc/ssh/ssh_config"拷貝並重新命名為"~/.ssh/config"。

標準的組態文件大概是這樣的:



[lots of explanations and possible options listed]
# Be paranoid by default
Host *
ForwardAgent no
ForwardX11 no
FallBackToRsh no
還有很多選項的設定可以用"man ssh"檢視"CONFIGURATION FILES"這一章。
組態文件是按順序讀取的。先設定的選項先生效。
假定你在www.foobar.com上有一個名為"bilbo"的帳號。


而且你要把"ssh-agent"和"ssh-add"結合起來使用並且使用資料壓縮來加快傳輸速度。因為主機名太長了,你懶得輸入這麼長的名字,用"fbc"作為"www.foobar.com"的簡稱。

你的組態文件可以是這樣的:

Host *fbc
HostName www.foobar.com
User bilbo
ForwardAgent yes
Compression yes
# Be paranoid by default
Host *
ForwardAgent no
ForwardX11 no
FallBackToRsh no

你輸入"ssh fbc"之後,SSH會自動地從組態文件中找到主機的全名,用你的用戶名登入並且用"ssh-agent"管理的密匙進行安全驗證。這樣很方便吧!


用SSH連線到其它遠端電腦用的還是"paranoid(偏執)"預設值設定。如果有些選項沒有在組態文件或指令行中設定,那麼還是使用預設值的"paranoid"設定。


在我們上面舉的那個例子中,對於到www.foobar.com的SSH連接:"ForwardAgent"和"Compression"被設定為"Yes";其它的設定選項(如果沒有用指令行參數)"ForwardX11"和"FallBackToRsh"都被設定成"No"。
其它還有一些需要仔細看一看的設定選項是:


l CheckHostIP yes
這個選項用來進行IP位址的檢查以防止DNS欺騙。
l CompressionLevel
壓縮的等級從"1"(最快)到"9"(壓縮率最高)。預設值值為"6"。
l ForwardX11 yes
為了在本地機執行遠端的X程序必須設定這個選項。
l LogLevel DEBUG
當SSH出現問題的時候,這選項就很有用了。預設值值為"INFO"。

組態服務端的軟體

SSH服務器的組態使用的是"/etc/ssh/sshd_config"組態文件,這些選項的設定在組態文件中已經有了一些說明而且用"man sshd"也可以檢視說明 。請注意OpenSSH對於SSH 1.x和2.x沒有不同的組態文件。

在預設值的設定選項中需要注意的有:


l PermitRootLogin yes
最好把這個選項設定成"PermitRootLogin without-password",這樣"root"用戶就不能從沒有密匙的電腦上登入。把這個選項設定成"no"將禁止"root"用戶登入,只能用"su"指令從普通用戶轉成"root"。


l X11Forwarding no
把這個選項設定成"yes"允許用戶執行遠端主機上的X程序。就算禁止這個選項也不能提高服務器的安全因為用戶可以安裝他們自己的轉發器(forwarder),請參看"man sshd"。
l PasswordAuthentication yes
把這個選項設定為"no"只允許用戶用關於密匙的方式登入。這當然會給那些經常需要從不同主機登入的用戶帶來麻煩,但是這能夠在很大程度上提高系統的安全性。關於密碼的登入方式有很大的弱點。
l # Subsystem /usr/local/sbin/sftpd
把最前面的#號去掉並且把路徑名設定成"/usr/bin/sftpserv",用戶就能使用"sftp"(安全的FTP)了(sftpserv在sftp軟體套件中)。因為很多用戶對FTP比較熟悉而且"scp"用起來也有一些麻煩,所以"sftp"還是很有用的。而且2.0.7版本以後的圖形化的ftp工具"gftp"也支持"sftp"。

拷貝文件

psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次