Martin Brown (mc@mcslp.com), 自由撰稿人, Consultant 使用 OpenSSH 為運(yùn)行遠(yuǎn)程終端提供安全環(huán)境。OpenSSH 和終端的基本用法非常簡(jiǎn)單,不過(guò),本文還將介紹允許自動(dòng)登錄到遠(yuǎn)程主機(jī)的其他元素、運(yùn)行遠(yuǎn)程應(yīng)用程序的方法,以及如何在主機(jī)之間安全地復(fù)制文件。 典型的 UNIX? 管理員擁有一套經(jīng)常用于輔助管理過(guò)程的關(guān)鍵實(shí)用工具、訣竅和系統(tǒng)。存在各種用于簡(jiǎn)化不同過(guò)程的關(guān)鍵實(shí)用工具、命令行鏈和腳本。其中一些工具來(lái)自于操作系統(tǒng),而大部分的訣竅則來(lái)源于長(zhǎng)期的經(jīng)驗(yàn)積累和減輕系統(tǒng)管理員工作壓力的要求。本系列文章主要專(zhuān)注于最大限度地利用各種 UNIX 環(huán)境中可用的工具,包括簡(jiǎn)化異構(gòu)環(huán)境中的管理任務(wù)的方法。
您每天使用的標(biāo)準(zhǔn)網(wǎng)絡(luò)服務(wù)(如 FTP、Telnet、RCP 和遠(yuǎn)程 Shell (rsh) 等)在封閉環(huán)境中運(yùn)行良好,但使用這些服務(wù)在網(wǎng)絡(luò)上傳輸?shù)男畔⑹俏醇用艿摹H魏稳硕伎梢栽谀木W(wǎng)絡(luò)或遠(yuǎn)程計(jì)算機(jī)上使用包嗅探器查看交換的信息,有時(shí)甚至可以查看密碼信息。 而且,使用所有此類(lèi)服務(wù)時(shí),在登錄過(guò)程中用于自動(dòng)登錄的選項(xiàng)會(huì)受到限制,并且通常依賴(lài)于將純文本密碼嵌入到命令行才能執(zhí)行語(yǔ)句,從而使登錄過(guò)程變得更加不安全。 開(kāi)發(fā)的安全 Shell (SSH) 協(xié)議可以排除這些限制。SSH 能夠?yàn)檎麄€(gè)通信通道提供加密,其中包括登錄和密碼憑據(jù)交換,它與公鑰和私鑰一起使用可以為登錄提供自動(dòng)化身份驗(yàn)證。您還可以將 SSH 用作基礎(chǔ)傳輸協(xié)議。以這種方式使用 SSH 意味著在打開(kāi)安全連接后,加密通道可以交換所有類(lèi)型的信息,甚至 HTTP 和 SMTP 可以使用該方法來(lái)保證通信機(jī)制的安全。 OpenSSH 是 SSH 1 和 SSH 2 協(xié)議的免費(fèi)實(shí)現(xiàn)。它最初是作為 OpenBSD (Berkeley Software Distribution) 操作系統(tǒng)的一部分開(kāi)發(fā)的,現(xiàn)在被發(fā)布為 UNIX 或 Linux? 和類(lèi)似操作系統(tǒng)的常規(guī)解決方案。
OpenSSH 是免費(fèi)軟件,可以從 OpenSSH 的主要網(wǎng)站下載(請(qǐng)參見(jiàn)參考資料)??梢允褂枚喾N系統(tǒng)(包括 Linux、HP-UX、AIX?、Solaris、Mac OS X 等)上的源代碼構(gòu)建 OpenSSH 系統(tǒng)。通常可以找到所選平臺(tái)和版本的預(yù)編譯二進(jìn)制代碼。有些供應(yīng)商甚至作為操作系統(tǒng)的一部分提供 OpenSSH 工具包。 要構(gòu)建OpenSSH,您需要以下內(nèi)容:
如果您需要使用缺省配置設(shè)置,請(qǐng)使用常規(guī)構(gòu)建序列,如下面的清單 1 所示。 清單 1. 使用常規(guī)構(gòu)建序列
這會(huì)將二進(jìn)制文件、庫(kù)文件和配置文件安裝到 /usr/local 目錄中,例如,二進(jìn)制文件安裝到 /usr/local/bin,配置文件安裝到 /usr/local/etc。如果希望將各種工具集成到主環(huán)境中,那么您可能需要指定設(shè)置基本目錄的
您可能指定的一些其他常規(guī)選項(xiàng)包括:
完成配置后,使用 構(gòu)建和安裝過(guò)程完成后,您需要配置系統(tǒng),先創(chuàng)建唯一標(biāo)識(shí)系統(tǒng)的 SSH 密鑰,然后啟用客戶(hù)機(jī)和主機(jī)之間的安全通信。您可以運(yùn)行:
或者,您可以在命令行上手動(dòng)執(zhí)行各個(gè)步驟。您需要?jiǎng)?chuàng)建三個(gè)密鑰(每個(gè)密鑰對(duì)應(yīng)于一個(gè)主要加密算法:rsa1、rsa 和 dsa)。例如,清單 2 顯示了如何創(chuàng)建 rsa1 密鑰。 清單 2. 創(chuàng)建 rsa1 密鑰
系統(tǒng)提示您輸入密碼。對(duì)于主機(jī)密鑰,您可能不需要密鑰密碼,所以您可以按 Return 使用空密碼。或者,您可以在命令行上使用 清單 3. 使用 -N 選項(xiàng)加速過(guò)程
現(xiàn)在重復(fù)該過(guò)程,以創(chuàng)建 rsa 和 dsa 密鑰(請(qǐng)參見(jiàn)清單 4)。 清單 4. 創(chuàng)建 rsa 和 dsa 密鑰
這將為每個(gè)密鑰類(lèi)型創(chuàng)建兩個(gè)文件:公鑰(在以 .pub 結(jié)尾的文件中)和私鑰。您應(yīng)確保私鑰僅由根和 SSH 流程讀取——這應(yīng)自動(dòng)配置。您可能需要將公鑰復(fù)制到網(wǎng)絡(luò)文件系統(tǒng) (NFS) 共享中的中央位置,使人們能夠?qū)⑵涮砑拥揭阎鳈C(jī)密鑰列表中。 最后,您需要啟動(dòng) sshd 過(guò)程,并對(duì)其進(jìn)行配置,以便在啟動(dòng)時(shí)執(zhí)行。對(duì)于 Linux 主機(jī),您可以在 contrib/redhat/sshd.init 中找到合適的可以添加到 /etc/init.d 的 init 腳本。
OpenSSH 的主要角色是用作 SSH 工具,它是 Telnet 協(xié)議的安全替代方法,用于安全地遠(yuǎn)程登錄到 UNIX 或 Linux 主機(jī)。 要使用標(biāo)準(zhǔn) Shell 連接到遠(yuǎn)程主機(jī),您只需鍵入主機(jī)名:
在缺省情況下,系統(tǒng)嘗試使用當(dāng)前用戶(hù)名作為登錄名稱(chēng)。要使用不同的登錄名稱(chēng),請(qǐng)?jiān)谥鳈C(jī)名前加上該登錄名稱(chēng),并使用 @ 符號(hào)分開(kāi)。例如:
系統(tǒng)提示您輸入用戶(hù)密碼——這與 Telnet 相似。 您第一次連接到主機(jī)時(shí),系統(tǒng)會(huì)詢(xún)問(wèn)您是否需要將遠(yuǎn)程主機(jī)公鑰的副本保存在“已知主機(jī)”文件中(請(qǐng)參見(jiàn)清單 5)。 清單 5. 已知主機(jī)文件
以后,您不會(huì)收到此警告,但是,當(dāng)系統(tǒng)檢測(cè)到遠(yuǎn)程主機(jī)返回的公鑰與該主機(jī)文件中的公鑰不符時(shí)就會(huì)發(fā)出警告,指示可能存在黑客攻擊。這還可能意味著管理員僅重新生成了主機(jī)密鑰。 從本質(zhì)上講,SSH 和 Telnet 會(huì)話(huà)之間沒(méi)有什么不同,只不過(guò) SSH 會(huì)話(huà)進(jìn)行了加密,任何人幾乎不可能探聽(tīng)到您的會(huì)話(huà)內(nèi)容,也不可能知道您的密碼或您正在執(zhí)行的命令和操作。 您還可以使用 SSH 直接在遠(yuǎn)程主機(jī)上運(yùn)行命令,而無(wú)需使用 Shell。例如,要在遠(yuǎn)程主機(jī)上運(yùn)行 清單 6. 在遠(yuǎn)程主機(jī)上運(yùn)行 who 命令
遠(yuǎn)程執(zhí)行還模擬客戶(hù)端主機(jī)的標(biāo)準(zhǔn)輸入、輸出和錯(cuò)誤。這意味著您可以將輸出重新定向到遠(yuǎn)程命令。例如,您可以直接將信息附加到遠(yuǎn)程文件,方法是通過(guò)管道將輸出從命令傳輸?shù)竭h(yuǎn)程主機(jī)上的 SSH(請(qǐng)參見(jiàn)清單 7)。 清單 7. 直接將信息附加到遠(yuǎn)程文件
在使用 SSH 簡(jiǎn)化登錄過(guò)程時(shí),您可以使用此方法提高工作效率。
要打開(kāi) SFTP 連接,請(qǐng)?jiān)诿钚猩现付ㄖ鳈C(jī)名:
請(qǐng)記住,上面的命令假設(shè)您希望使用的登錄方式與當(dāng)前主機(jī)相同。要使用不同的登錄方式,請(qǐng)將在主機(jī)名前加上用戶(hù)名:
盡管 SFTP 的工作方式與 FTP 類(lèi)似,但仍存在一些局限性和差異。例如,F(xiàn)TP 中的 清單 8. FTP 中的 dir 提供了一個(gè)長(zhǎng)文件列表
在 SFTP 中, 清單 9. SFTP 中的 dir 僅提供一個(gè)簡(jiǎn)短列表
要獲得長(zhǎng)列表,請(qǐng)使用與 清單 10. 長(zhǎng)列表
其他命令,如更改目錄(
其格式類(lèi)似于
和前面一樣,若指定要使用的用戶(hù)名,請(qǐng)?jiān)谥鳈C(jī)前面加上用戶(hù)名,并用 @ 符號(hào)分開(kāi):
假設(shè)您用于連接的用戶(hù)有讀取權(quán)限,還需要使用元字符 ~ 才能訪問(wèn)主目錄中的信息。
要從登錄用戶(hù)的主目錄中進(jìn)行復(fù)制,請(qǐng)使用:
您甚至還可以通過(guò)使用展開(kāi)的大括號(hào) ({}) 更具體地選擇單個(gè)文件:
請(qǐng)注意,文件路徑中展開(kāi)的大括號(hào)(不是完整的遠(yuǎn)程路徑表達(dá)式)已用雙引號(hào)括上。 在上面所有的示例中,系統(tǒng)都會(huì)提示您輸入遠(yuǎn)程主機(jī)的密碼。通過(guò)為主機(jī)提供您自己的個(gè)人密鑰的公共部分可以避免這種情況。
當(dāng)您使用 要?jiǎng)?chuàng)建公鑰或私鑰,您需要使用 清單 11. 創(chuàng)建密鑰
您應(yīng)輸入保存密鑰(公共和私有組件)的文件的位置。使用缺省值(在主目錄中的 .ssh 目錄中)一般就可以了(請(qǐng)參見(jiàn)清單 12)。 清單 12. 提示輸入密碼
如果您在此階段輸入了密碼,則會(huì)創(chuàng)建安全密鑰文件,但是在每次使用密鑰時(shí),還必須輸入密碼。按 Return 意味著不需要任何密碼(請(qǐng)參見(jiàn)清單 13)。 清單 13. 通過(guò)按 Return 鍵跳過(guò)密碼需求
現(xiàn)在已創(chuàng)建了公鑰 (id_rsa.pub) 和對(duì)應(yīng)的私鑰 (id_rsa)。 要啟用自動(dòng)登錄,您必須將公鑰的內(nèi)容復(fù)制到遠(yuǎn)程主機(jī)上 ~/.ssh 目錄中的 authorized_keys 文件中。您可以使用 SSH 自動(dòng)完成此操作(請(qǐng)參見(jiàn)清單 14)。 清單 14. 啟用自動(dòng)登錄
還有,如果在多個(gè)主機(jī)中經(jīng)常執(zhí)行此操作,則可以使用小腳本或 Shell 函數(shù)來(lái)執(zhí)行所有必需步驟,如清單 15 所示。 清單 15. 使用 Shell 腳本啟用自動(dòng)登錄
您可以使用 setremotekey 腳本復(fù)制現(xiàn)有密鑰,如果密鑰不存在,可在復(fù)制之前創(chuàng)建一個(gè):
現(xiàn)在,每當(dāng)需要使用公鑰登錄到遠(yuǎn)程主機(jī)時(shí),您可以結(jié)合使用個(gè)人密鑰腳本和遠(yuǎn)程主機(jī)上該用戶(hù)接受的密鑰列表。
OpenSSH 是一個(gè)重要工具,它可以保護(hù)計(jì)算機(jī)之間的通信和信息傳輸?shù)陌踩?。它不僅是常規(guī)工具(如 Telnet、FTP 和 RCP)的安全替代方法,而且還可以充當(dāng)其他服務(wù)(如 Subversion、X Windows System 和 rsync)的傳輸協(xié)議。本文向您介紹了啟動(dòng)和運(yùn)行 OpenSSH 所需的基本步驟,如何最有效地使用 OpenSSH 提供的主要工具,以及如何使用密鑰交換工具來(lái)簡(jiǎn)化登錄和連接性問(wèn)題。 |
|