15.3. 設定一部 OpenSSH 用戶端

如要從一部用戶端機器連線到一部 OpenSSH 伺服器,用戶端機器必須已安裝 openssh-clientsopenssh 套件。

15.3.1. 使用 ssh 指令

ssh 指令是 rloginrsh 以及 telnet 等指令之強調安全性的替代品。 它使您可以登入到遠端的機器以及在遠端機器上執行指令。

使用 ssh 登入到遠端機器相當類似使用 telnet。 如要登入稱為 penguin.example.net 的遠端機器,請在 shell 提示符號下輸入以下指令:

ssh penguin.example.net

當您第一次 ssh 登入到一部遠端機器,您將會看到如下的訊息:

The authenticity of host 'penguin.example.net' can't be established.
DSA key fingerprint is 94:68:3a:3a:bc:f3:9a:9b:01:5d:b3:07:38:e2:11:0c.
Are you sure you want to continue connecting (yes/no)? 

請輸入 yes 以繼續。 這個動作(如以下所示)將會加入該伺服器到您的系統已知的主機清單中:

Warning: Permanently added 'penguin.example.net' (RSA) to the list of known hosts.

再來您將會看到一個提示符號問您在遠端機器的密碼,在輸入密碼後,您就會得到遠端機器的一個 shell 提示符號。 假如您沒有指定使用者名稱,您在用戶端機器登入的使用者名稱將會傳送至遠端機器。 假如您想要指定一個不同的使用者名稱,請使用下列的指令:

ssh username@penguin.example.net

您也可以使用如 ssh -l username penguin.example.net 的語法。

可以使用 ssh 指令在遠端機器上來執行指令(不需要登入 shell 提示符號),語法是 ssh hostname command。 舉例來說,假如您在遠端機器(penguin.example.net)上執行 ls /usr/share/doc 指令,請在 shell 提示符號下輸入以下指令:

ssh penguin.example.net ls /usr/share/doc

在您輸入正確的密碼後,將會列示出遠端目錄 /usr/share/doc 的內容,而且您會回到您的本機 shell 提示符號。

15.3.2. 使用 scp 指令

可以使用 scp 指令來透過一個安全且加密的連線在機器間傳輸檔案,就如同 rcp 指令。

傳輸一個本機檔案到遠端機器的一般語法如下:

scp localfile username@tohostname:/newfilename

localfile 代表來源檔案,而 username@tohostname:/newfilename 代表目的地。

如要傳輸本機檔案 shadowman 到您在 penguin.example.net 主機中的帳號,請在 shell 提示符號下輸入以下指令(使用您的使用者名稱取代 username):

scp shadowman username@penguin.example.net:/home/username

這將會傳輸本機檔案 shadowman 到 penguin.example.net 主機上的 /home/username/shadowman

如果要傳輸一個遠端的檔案到本機系統,一般的語法如下:

scp username@tohostname:/remotefile /newlocalfile

remotefile 代表來源檔案,而 newlocalfile 代表目的地。

還可以指定多重的檔案當作來源檔案,例如要傳輸 /downloads 目錄的內容到遠端機器 penguin.example.net 上一個既存的目錄稱為 uploads,請在 shell 提示符號下輸入以下指令:

scp /downloads/* username@penguin.example.net:/uploads/

15.3.3. 使用 sftp 指令

sftp 工具可以使用來開啟一個安全的且互動式的 FTP 連線,它相當類似 ftp,不過它是使用一種安全且加密的連線。 一般的語法是 sftp username@hostname.com。 一旦認證通過後,您便可以使用類似 FTP 中的一系列指令。 請參閱 sftp 的 man page 以取得這些指令的清單。 如要讀取 man page,請在 shell 提示符號下執行 man sftp 指令。 sftp 工具只包含在 OpenSSH 2.5.0p1 以上的版本。

15.3.4. 產生金鑰對

假如您不想要每次使用 sshscpsftp 來連線到遠端機器時都必須輸入密碼,您可以產生一個認證的金鑰。

必須產生金鑰給每一個使用者,如要如此做,請以想要連線到遠端機器的使用者身份執行下列的步驟。 假如您以 root 使用者完成以下步驟,只有 root 才能使用這些金鑰。

從 OpenSSH 3.0 版本開始,~/.ssh/authorized_keys2~/.ssh/known_hosts2/etc/ssh_known_hosts2 都已經被取代不用了。 SSH 通訊協定 1 與 2 共用 ~/.ssh/authorized_keys~/.ssh/known_hosts/etc/ssh/ssh_known_hosts 檔案。

Red Hat Linux 9 預設使用 SSH 通訊協定 2 以及 RSA 金鑰。

提示建議
 

假如您重新安裝 Red Hat Linux,而想要儲存您之前所產生的金鑰對,請備份您家目錄下的 .ssh 目錄。 在重新安裝完後,將該目錄複製回去您的家目錄中,系統上的所有使用者(包括 root)都可以完成這個過程。

15.3.4.1. 產生一副版本 2 的 RSA 金鑰對

請使用以下的步驟來產生 SSH 通訊協定版本 2 的一副 RSA 金鑰對,這是從 OpenSSH 2.9 版本開始的預設值。

  1. 如要產生一副 RSA 金鑰對以使用於版本 2 的通訊協定,請在 shell 提示符號下輸入以下指令:

    ssh-keygen -t rsa

    請接受 ~/.ssh/id_rsa 的預設檔案位置,並輸入一個與您本機帳號的密碼不同的通行密碼 (passphrase),然後再輸入一次以做確認。

    公鑰將會寫入到 ~/.ssh/id_rsa.pub,而私鑰則是寫入到 ~/.ssh/id_rsa。 請勿散佈您的私鑰給任何人。

  2. 使用 chmod 755 ~/.ssh 指令來變更 .ssh 目錄的權限設定。

  3. 複製 ~/.ssh/id_rsa.pub 的內容到您想要連線之機器的 ~/.ssh/authorized_keys 檔案中,假如 ~/.ssh/authorized_keys 不存在,您可以複製 ~/.ssh/id_rsa.pub 檔案到另一部機器的 ~/.ssh/authorized_keys 檔案。

  4. 假如您是使用 GNOME 的桌面環境,請跳過本章節至 菴 15.3.4.4 節,假如您並沒有使用 X 視窗系統,請跳過本章節至 菴 15.3.4.5 節

15.3.4.2. 產生一副版本 2 的 DSA金鑰對

請使用下列的步驟來產生 SSH 通訊協定版本 2 的一副 DSA 金鑰對。

  1. 如要產生一副 DSA 金鑰對以使用於版本 2 的通訊協定,請在 shell 提示符號下輸入以下指令:

    ssh-keygen -t dsa

    請接受 ~/.ssh/id_dsa 的預設檔案位置,並輸入一個與您本機帳號的密碼不同的通行密碼,然後再輸入一次以做確認。

    提示建議
     

    通行密碼是用來認證一個使用者的一串文字與字元,它與密碼不同的地方在於您可以使用空白字元或 tab 按鍵在通行密碼上。 通行密碼通常都比密碼長,因為它們通常是片語而不是單字。

    公鑰將會寫入到 ~/.ssh/id_dsa.pub,而私鑰則是寫入到 ~/.ssh/id_dsa。 請切記決不散佈您的私鑰給任何人。

  2. 使用 chmod 755 ~/.ssh 指令來變更 .ssh 目錄的權限設定。

  3. 複製 ~/.ssh/id_dsa.pub 的內容到您想要連線之機器的 ~/.ssh/authorized_keys 檔案中,假如 ~/.ssh/authorized_keys 不存在,您可以複製 ~/.ssh/id_dsa.pub 檔案到另一部機器的 ~/.ssh/authorized_keys 檔案。

  4. 假如您是使用 GNOME 的桌面環境,請跳過本章節至 菴 15.3.4.4 節,假如您並沒有使用 X 視窗系統,請跳過本章節至 菴 15.3.4.5 節

15.3.4.3. 產生一副版本 1.3 與 1.5 的 RSA 金鑰對

請使用以下的步驟來產生 SSH 通訊協定版本 1 的一副 RSA 金鑰對,假如您只連線到使用 DSA 的系統,您並不需要 RSA 版本 1.3 或 RSA 版本 1.5 的金鑰對。

  1. 如要產生一副 RSA 金鑰對以使用於版本 1.3 與 1.5 的通訊協定,請在 shell 提示符號下輸入以下指令:

    ssh-keygen -t rsa1

    請接受預設的檔案位置(~/.ssh/identity),並輸入一個與您本機帳號的密碼不同的通行密碼,然後再輸入一次以做確認。

    公鑰將會寫入到 ~/.ssh/identity.pub,而私鑰則是寫入到 ~/.ssh/identity。 請勿散佈您的私鑰給任何人。

  2. 使用 chmod 755 ~/.sshchmod 644 ~/.ssh/identity.pub 來變更 .ssh 目錄與金鑰的權限設定。

  3. 複製 ~/.ssh/identity.pub 的內容到您想要連線之機器的 ~/.ssh/authorized_keys 檔案中,假如 ~/.ssh/authorized_keys 不存在,您可以複製 ~/.ssh/identity.pub 檔案到另一部機器的 ~/.ssh/authorized_keys 檔案。

  4. 假如您是使用 GNOME 的桌面環境,請跳過本章節至 菴 15.3.4.4 節,假如您並不是使用 GNOME,請跳過本章節至 菴 15.3.4.5 節

15.3.4.4. 在 GNOME 中設定 ssh-agent

ssh-agent 工具可以使用來儲存您的通行密碼,所以您便不需在每次啟動 sshscp 連線時輸入通行密碼。 假如您是使用 GNOME,openssh-askpass-gnome 工具可以用來當您登入 GNOME 時提示您輸入您的通行密碼,並儲存它直到您登出 GNOME。 在該 GNOME 作業階段中所作的任何 sshscp 連線,都將不需要您輸入您的密碼或通行密碼。 假如您不是使用 GNOME,請參考 菴 15.3.4.5 節

如要在 GNOME 作業階段儲存您的通行密碼,請遵照以下的步驟:

  1. 系統需要安裝了 openssh-askpass-gnome 套件,您可以使用 rpm -q openssh-askpass-gnome 以檢查它是否已經安裝了。 假如沒有的話,請從您的 Red Hat Linux 光碟套裝或是從 Red Hat 的 FTP 映射站台,或是使用 Red Hat Network 來安裝它。

  2. 請選擇 『主選單按鈕』(面板上)=> 『偏好設定』 => 『更多偏好設定』 => 『作業階段』,然後點選『初始啟動程式』的頁籤。 點選 新增 然後在 『初始啟動指令』 的文字欄輸入 /usr/bin/ssh-add。 請設定它的次序號碼高於任何已有的指令,以確保它是最後才執行的。 在此建議您將 ssh-add 次序號碼設為 70 或以上,次序號碼越高,它的執行順序越後面。 假如在此您尚有其他的程式,這個程式應該是最後才執行。 請點選 關閉 以離開這個程式。

  3. 先登出然後再登入 GNOME;也就是說,重新啟動 X。 在 GNOME 啟動後,會出現一個對話窗提示您輸入您的通行密碼,請輸入正確的通行密碼。 假如您有設定 DSA 與 RSA 金鑰環,您將會被提示兩次。 從此開始,您將不再被 ssh, scpsftp 提示輸入密碼了。

15.3.4.5. 設定 ssh-agent

ssh-agent 可以使用來儲存您的通行密碼,所以您便不需要在每次建立 sshscp 連線時輸入密碼。 假如您不是使用 X 視窗系統,請在 shell 提示符號下執行這些步驟; 假如您是使用 GNOME,而您不想設定為在登入時提示您輸入通行密碼(請看 菴 15.3.4.4 節),這個程序可以使用在終端機視窗中(如 XTerm)。 假如您正在執行 X 而不是 GNOME,這個程序也可使用在終端機視窗。 然而您的通行密碼只適用於該終端機視窗,而不適用於全域的設定。

  1. 在 shell 提示符號下輸入以下指令:

    exec /usr/bin/ssh-agent $SHELL
  2. 然後再輸入這個指令:

    ssh-add 

    然後輸入您的通行密碼。 假如您有設定一個以上的金鑰對,您將會收到每一個的提示要求輸入密碼。

  3. 當您登出後,您的通行密碼將會被釋放,當您每次登入到一個虛擬主控台或開啟一個終端機視窗,您必須執行這兩個指令。