今天,我們來繼續學習Unix密鑰的知識。當您使用 ssh、sftp 或 scp 登錄到遠程系統後,您仍需要使用密碼才能完成登錄過程。通過創建公鑰或私鑰,將密鑰的公共部分附加到~/.ssh/authorized_keys 文件,並與遠程站點交換了有效Unix密鑰後,您可以省去提供密碼的要求並允許自動登錄。
要創建公鑰或私鑰,您需要使用 ssh-keygen 來指定Unix密鑰加密的類型。在演示中使用了 rsa 密鑰類型,但是其他密鑰類型也有效。要創建密鑰,請參見清單 11。
清單 11. 創建Unix密鑰
- $ ssh-keygen -t rsa
- Generating public/private rsa key pair.
- Enter file in which to save the key (/root/.ssh/id_rsa):
您應輸入保存Unix密鑰(公共和私有組件)的文件的位置。使用缺省值(在主目錄中的 .ssh 目錄中)一般就可以了(請參見清單 12)。
清單 12. 提示輸入密碼
- Created directory '/root/.ssh'.
- Enter passphrase (empty for no passphrase):
如果您在此階段輸入了密碼,則會創建安全密鑰文件,但是在每次使用Unix密鑰時,還必須輸入密碼。按 Return 意味著不需要任何密碼(請參見清單13)。
清單 13. 通過按 Return 鍵跳過密碼需求
- Enter same passphrase again:
- Your identification has been saved in /root/.ssh/id_rsa.
- Your public key has been saved in /root/.ssh/id_rsa.pub.
- The key fingerprint is:
- 98:da:8d:48:a8:09:44:b1:b3:62:51:2d:a9:6b:61:ba root@remotehost
現在已創建了公鑰 (id_rsa.pub) 和對應的私鑰 (id_rsa)。
要啟用自動登錄,您必須將公鑰的內容復制到遠程主機上 ~/.ssh 目錄中的 authorized_keys 文件中。您可以使用 SSH 自動完成此操作(請參見清單 14)。
清單 14. 啟用自動登錄
$ cat ./.ssh/id_rsa.pub | ssh mc@remotehost 'cat >> .ssh/authorized_keys';
還有,如果在多個主機中經常執行此操作,則可以使用小腳本或 Shell 函數來執行所有必需步驟,如清單 15 所示。
清單 15. 使用 Shell 腳本啟用自動登錄
- OLDDIR='pwd';
- if [ -z "$1" ]; then
- echo Need user@host info;
- exit;
- fi;
- cd $HOME;
- if [ -e "./.ssh/id_rsa.pub" ]; then
- cat ./.ssh/id_rsa.pub | ssh $1 'cat >> .ssh/authorized_keys';
- else
- ssh-keygen -t rsa;
- cat ./.ssh/id_rsa.pub | ssh $1 'cat >> .ssh/authorized_keys';
- fi;
- cd $OLDDIR
您可以使用 setremotekey 腳本復制現有Unix密鑰,如果密鑰不存在,可在復制之前創建一個: $ setremotekey mc@remotehost
現在,每當需要使用公鑰登錄到遠程主機時,您可以結合使用個人Unix密鑰腳本和遠程主機上該用戶接受的密鑰列表。
OpenSSH 是一個重要工具,它可以保護計算機之間的通信和信息傳輸的安全。它不僅是常規工具(如 Telnet、FTP 和 RCP)的安全替代方法,而且還可以充當其他服務(如 Subversion、X Windows System 和 rsync)的傳輸協議。
本文向您介紹了啟動和運行 OpenSSH 所需的基本步驟,如何最有效地使用 OpenSSH 提供的主要工具,以及如何使用Unix密鑰交換工具來簡化登錄和連接性問題。