8.10. OpenSSH

Contributed by Chern Lee , April 21, 2001.

安全 shell 是一套用於安全地訪問遠端機器的網路連接工具。可以被用來代替 rlogin, rsh, rcp,telnet。另外,TCP/IP 連接也可以通過 ssh 來建立隧道和轉發資料。Ssh 可以對所有傳輸的資料包進行加密以便防止被人竊聽,網路入侵和攻擊。

OpenSSH 是由 OpenBSD 計畫來維護的,建立在 SSH v1.2.12 基礎之上,並作了最新的 錯誤修補。它也相容 SSH 協議1 和2。自從FreeBSD4.0 開始,OpenSSH 已作為基本系統的 一部分了。

8.10.1. 使用 OpenSSH 的優勢

通常,當使用 telnetrlogin 時,資料是以明碼的形式發送的,並沒有加密。在客戶 機和伺服器上的網路探測器可以在會話中偷竊到傳輸的用戶名/密碼。OpenSSH 提供 了多種驗證和加密的方法來阻止這種事情的發生。

8.10.2. 啟用sshd

B確信已將下面這行加入了 rc.conf 文件:

    sshd_enable="YES"

這將在下次系統初始化時載入 ssh 程式。或者,可以簡單地運行 sshd 程式。

8.10.3. SSH 客戶機

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: *******
          

如果使用 rlogintelnet 創建了一個會話,那登陸會繼續。當用戶端連接時,SSH 會 利用關鍵字指紋系統來指定這個伺服器的驗證。當第一次連接的時候,會提示用戶只要鍵入 'yes'。以後的登陸會自動檢驗已保存的指紋關鍵字。如果保存的指紋與登陸時接受的指紋不 同,SSH 用戶端將發出警告。指紋被保存在~/.ssh/known_hosts 中。

8.10.4. 安全拷貝

Scp 命令與 rcp 工作起來很象;會拷貝一個檔到或從一個遠端機器上。

    #  scp user@foobardomain.com:/COPYRIGHT COPYRIGHT
    user@foobardomain.com's password: 
    COPYRIGHT            100% |*****************************|  4735       
    00:00    
    #      

既然指紋已被保存在這台主機上,那當使用 scp 時,將被修改。

8.10.5. 配置

針對 OpenSSH 程式和用戶端系統的配置檔放在 /etc/ssh 目錄中。

ssh_config 配置客戶機系統,sshd_config 配置守護程式。

8.10.6. ssh-keygen

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-agentssh-add 是用來管 理多密碼私有密匙的工具。

8.10.7. SSH 通道

OpenSSH 可以在一個加密的會話中創建一個通道來壓縮另一個協議。下面的命令告訴sshtelnet 創建一個通道。

    % ssh -2 -N -f -L 5023:localhost:23 user@foo.bar.com
    %
           

一個 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 通道環境。密匙可 以被用來代替鍵入密碼,通道可以被運行在一個相互分離的用戶上。

8.10.8. Further Reading

OpenSSH

ssh(1) scp(1) ssh-keygen(1) ssh-agent(1) ssh-add(1)

sshd(8) sftp-server(8)