Contributed by Chern Lee <chern@FreeBSD.org>, April 21, 2001.
安全 shell 是一套用於安全地訪問遠端機器的網路連接工具。可以被用來代替 rlogin, rsh, rcp, 和 telnet。另外,TCP/IP 連接也可以通過 ssh 來建立隧道和轉發資料。Ssh 可以對所有傳輸的資料包進行加密以便防止被人竊聽,網路入侵和攻擊。
OpenSSH 是由 OpenBSD 計畫來維護的,建立在 SSH v1.2.12 基礎之上,並作了最新的 錯誤修補。它也相容 SSH 協議1 和2。自從FreeBSD4.0 開始,OpenSSH 已作為基本系統的 一部分了。
通常,當使用 telnet 或 rlogin 時,資料是以明碼的形式發送的,並沒有加密。在客戶 機和伺服器上的網路探測器可以在會話中偷竊到傳輸的用戶名/密碼。OpenSSH 提供 了多種驗證和加密的方法來阻止這種事情的發生。
Ssh 的工具與 rlogin 工作起來很象:
# ssh user@foobardomain.com Host key not found from the list of known hosts. Are you sure you want to continue connecting (yes/no)? yes Host 'foobardomain.com' added to the list of known hosts. user@foobardomain.com's password: *******
如果使用 rlogin 或 telnet 創建了一個會話,那登陸會繼續。當用戶端連接時,SSH 會 利用關鍵字指紋系統來指定這個伺服器的驗證。當第一次連接的時候,會提示用戶只要鍵入 'yes'。以後的登陸會自動檢驗已保存的指紋關鍵字。如果保存的指紋與登陸時接受的指紋不 同,SSH 用戶端將發出警告。指紋被保存在~/.ssh/known_hosts 中。
Scp 命令與 rcp 工作起來很象;會拷貝一個檔到或從一個遠端機器上。
# scp user@foobardomain.com:/COPYRIGHT COPYRIGHT user@foobardomain.com's password: COPYRIGHT 100% |*****************************| 4735 00:00 #
既然指紋已被保存在這台主機上,那當使用 scp 時,將被修改。
Ssh-keygen 可以用來產生 RSA 密匙來驗證一個用戶以代替使用密碼。
% ssh-keygen Initializing random number generator... Generating p: .++ (distance 66) Generating q: ..............................++ (distance 498) Computing the keys... Key generation complete. Enter file in which to save the key (/home/user/.ssh/identity): Enter passphrase: Enter the same passphrase again: Your identification has been saved in /home/user/.ssh/identity. ...
Ssh-keygen 將產生一個公共的和私有的密匙對來用於驗證。私有密匙保存在 ~/.ssh/identity 中,而公共密匙保存在 ~/.ssh/identity.pub 中。為了安裝工作,公共密 匙必須放在遠端機器的 ~/.ssh/authorized_keys 中。
這將允許連接到基於 RSA 驗證的遠端機器以代替使用密碼。 如果一條公共短語使用 ssh-keygen,那用戶為了使用私有密匙需要每次都鍵入一個密碼。
一個 SSH v2 DSA 密匙可以使用 ssh-keygen -d 命令(或ssh-keygen -t dsa ,在 FreeBSD-CURRENT 中)來創建。這將只在SSH v2 會話的中創建一個公共/私有DSA 密匙來使 用。
公共密匙被存儲在 ~/.ssh/id_dsa.pub 中,而私有密匙被存儲在 ~/.ssh/id_dsa 中。DSA 公共密匙被放在遠端機器的 ~/.ssh/authorized_keys2 中。ssh-agent 和 ssh-add 是用來管 理多密碼私有密匙的工具。
OpenSSH 可以在一個加密的會話中創建一個通道來壓縮另一個協議。下面的命令告訴ssh 為 telnet 創建一個通道。
% ssh -2 -N -f -L 5023:localhost:23 user@foo.bar.com %
-2這迫使ssh 使用2.0 版的協定。
-N不指出命令,而只有通道。如果忽略了,ssh 將初始化一個普通的會話。
-f迫使ssh 在後臺運行ssh。
-L以localport:localhost:remoteport的風格初始化一個本地通道。
foo.bar.com是遠端/目標SSH 伺服器。
一個 SSH 通道通過在本地的主機和埠上指定一個偵聽套接字來工作。通過 SSH 連接 到遠端機器把所有的連接指向本地主機/埠。
在這個例子中,在本機上的埠5023被指向遠端機器的埠23。由於23 是用於 telnet 的,所以這將通過SSH 通道創建一個安全的 telnet 會話。
這可以用來隱藏許多不安全的TCP 協議如smtp, pop3, ftp 等。
一個典型的SSH 通道
% ssh -2 -N -f -L 5025:localhost:25 user@mailserver.foobar.com user@mailserver.foobar.com's password: ***** % telnet localhost 5025 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 mailserver.foobar.com ESMTP
這可以用來連接 ssh-keygen 和額外用戶帳戶來創建一個無縫的 SSH 通道環境。密匙可 以被用來代替鍵入密碼,通道可以被運行在一個相互分離的用戶上。