810 likes | 996 Vues
第 25 章. SSH 伺服器. 本章提要. 25-1 SSH 簡介 25-2 為何需要加密機制 25-3 SSH 的運作原理 25-4 安裝與啟動 SSH 伺服器 25-5 在 Linux 透過 SSH 遠端登入及傳輸檔案. 25-1 SSH 簡介. 所謂的 SSH (Secure SHell) 是指 SSH 通訊協定 , 而 SSH 伺服器則是透過此協定 , 來提供遠端登入及檔案傳輸的服務。
E N D
第 25 章 SSH 伺服器
本章提要 • 25-1 SSH 簡介 • 25-2 為何需要加密機制 • 25-3 SSH 的運作原理 • 25-4安裝與啟動 SSH 伺服器 • 25-5 在 Linux 透過 SSH 遠端登入及傳輸檔案
25-1 SSH 簡介 • 所謂的 SSH (Secure SHell) 是指 SSH 通訊協定, 而 SSH 伺服器則是透過此協定, 來提供遠端登入及檔案傳輸的服務。 • 以往大多數在網路上傳輸的資料都是不加密的, 如 Telnet、FTP 、HTTP... 等。由於當初在制定網路規格時, 網路環境只是美國軍方的一個實驗,並不知道會在不久後的現在如此風行, 因而沒有考慮到網路安全的部分。
SSH 簡介 • 而現在因為網路環境的發達, 各種安全問題日益增多, 新的通訊協定及程式不斷出現, 希望可以解決資料在網路上傳輸的安全問題。SSH 協定便在提供遠端登入及檔案傳輸服務時, 增加了將資料加密的機制, 既可以提供與常用的 Telnet 和 FTP 程式相同的服務, 還可以解決此兩個程式在傳輸資料時沒有加密的缺點。
SSH 簡介 • SSH 協定 • 支援 SSH 協定的程式
SSH 協定 • 目前 SSH 協定有 SSH1 及 SSH2 兩個版本並行, 兩者都有提供資料加密機制, 只是加密的方式不同。現在較常被使用的是 SSH2, 其使用 22 號通訊埠, 具有以下 3 個優點: • 可對傳輸中的資料加密。 • 可以完全取代 Telnet、FTP 程式及 r 系列指令 (例如 rlogin、rsh、rcp...等)。 • 可轉送其他 X11 和 TCP/IP 的資料。
支援 SSH 協定的程式 • 目前實做 SSH 協定的程式中, 比較有名的有 SSH Communications Security 公司的 SSH (網址為 http://www.ssh.com/) 及 OpenBSD 組織的OpenSSH (網址為 http://www.openssh.org/)。
支援 SSH 協定的程式 • 其中 SSH Communications Security 公司的 SSH 程式, 雖然於非商業使用是免費的, 但商業使用則須付費。 • 因此大多數人用的是皆可免費使用的 OpenSSH, 各Linux 發行版所附的SSH 程式也是 OpenSSH 。
25-2 為何需要加密機制 • 前面說大部分的網路程式在傳輸資料時都是不加密, 但若不是親眼看見, 可能還感覺不到危機。 • 筆者底下做個小實驗, 您將可了解有太多現成的程式可以截取網路中的封包, 而封包中可能就有使用者的帳號和密碼。
為何需要加密機制 • 筆者使用 sniffit 這個網管程式來做監測, 您可至http://reptile.rug.ac.be/~coder/sniffit/sniffit.html 下載。筆者以 sniffit.0.3.5.tar.gz 為例, 請依下列方式安裝:
為何需要加密機制 • 接著請執行下列指令啟動 sniffit: • 透過 sniffit 將可以監測本台電腦的所有連線:
為何需要加密機制 • 以上為筆者監測連到本機 Telnet 連線的結果。由於 Telnet 連線在傳輸過程中並沒有加密, 因此透過監測程式可以直接取得使用者所傳送的所有資料。 • 例如上圖中, 我們由第一行的監測結果 "ywwang..123.." 可以得知, 該使用者的帳號為 "ywwang"、密碼為 "123" (其中 ".." 則表示 [Enter] 鍵)。
為何需要加密機制 • 除了 Telnet 連線以外, 我們常用來傳輸資料的 FTP 連線也是不加密的, 因此同樣可以透過網路監測軟體取得使用者與伺服器間互相傳送的所有訊息, 其中當然也包含了使用者的帳號及密碼:
為何需要加密機制 • 僅僅透過網路監測程式監看本機, 就可以獲得這麼多的 "資訊", 如果有人用其來監測整個區域網路, 輕輕鬆鬆就可以獲得在整個區域網路中流通的所有訊息了。 • 現在您是不是已經深刻的體會到, 沒有經過加密的線上傳輸的確非常沒有保障。
為何需要加密機制 • 要解決這個問題, 使用有加密機制的通訊協定是個不錯的選擇。只要資料在傳輸前有經過加密, 則透過網路監測軟體只能獲得一堆難以解讀的亂碼, 自然可以達到保護資料安全的目的。 • 下一節中, 我們將說明 SSH 協定加密的原理, 並會接著在稍後的內容中說明如何安裝及啟動 SSH 伺服器。
25-3 SSH 的運作原理 • 為了維護資料的安全, 一般會採用金鑰加密法 (Key Encryption)來為線上傳輸的資料加密。 • 此法的原理是:用戶端及伺服端均擁有一把金鑰 (key)。用戶端在傳輸資料前, 先用自己擁有的金鑰加密, 再將資料傳給伺服端, 而伺服端收到此加密過的資料後, 必須用其所持有的金鑰解密, 才能解讀所獲的資料。
SSH 的運作原理 • 透過此方式, 就算資料在傳輸過程中被有心人截取, 其所得到的也只是一組亂碼, 並且因為沒有金鑰, 難以分析資料, 而無法獲得有用的資訊。 • SSH 也是用金鑰來加密傳輸的資料, SSH 伺服器上存在著以下 2 種金鑰:
SSH 的運作原理 • host key:host key 置於 /etc/ssh 目錄中, 依加密方式的不同而有不同的檔案。其中 ssh_host_key、ssh_host_rsa_key 與 ssh_host_dsa_key 為私有金鑰;ssh_host_key.pub、ssh_host_rsa_key.pub 與 ssh_host_dsa_key.pub 為公開金鑰。 • 而上述 6 個金鑰中, ssh_host_key 及 ssh_host_key.pub 為 SSH1 協定所使用的金鑰;ssh_host_rsa_key、ssh_host_rsa_key.pub 及 ssh_host_dsa_key、ssh_host_dsa_key.pub 則為 SSH2 協定所使用的金鑰 。 • SSH 伺服器目前支援 SSH1 及 SSH2 通訊協定, 預設採用 SSH2 協定。
SSH 的運作原理 • server key:server key 儲存在記憶體中, 預設每小時重新產生一次, 透過修改 /etc/ssh/sshd_config 設定檔, 可設定產生的時間。 • 每台 SSH 伺服器上都會有獨特的 host key, 當使用者嘗試連線到伺服器時,SSH 的伺服程式 sshd 會回傳 host key 中的公開金鑰和 server key 給使用者的用戶端程式。
SSH 的運作原理 • 這時用戶端程式會比較所收到的公開金鑰是否和資料庫中的相同(若是第一次連線, 則加入資料庫中), 藉以確認該機器不是假冒的。 • 接著用戶端程式會隨機產生一個 256 bit 的亂數, 並使用伺服器所傳來的host key 和 server key 加密傳回給 sshd。
SSH 的運作原理 • 在正式建立起連線和傳輸資料之前,用戶端程式和 sshd 之間的溝通都是靠這個隨機亂數來加密。 • 當溝通完畢正式建立連線時, sshd 會決定要使用的加密方式, 接下來的資料傳輸都使用該方式來加密。 • 整個流程如下圖所示:
SSH 的運作原理 • 成功建立連線之後, sshd 會依下列的步驟處理: • 若從遠端的終端機視窗登入 SSH 伺服器, 並且沒有指定其他特別指令 (SSH提供了一組不需登入伺服器, 可以直接在遠端主機上執行進行檔案傳輸的指令)。則在成功建立連線後, 會顯示該使用者上一次登入伺服器的時間及 /etc/motd 公告訊息檔, 並且記錄本次登入的時間。
SSH 的運作原理 2.檢查是否有 /etc/nologin 檔案的存在, 若有則結束連線。 3. 切換到該使用者的權限。 4. 設定基本的環境變數。 5. 讀取使用者家目錄中的 .ssh/environment 檔。 6. 切換到使用者家目錄。
SSH 的運作原理 • 若使用者家目錄中有 .ssh/rc 指令檔, 則執行此檔案, 否則執行 /etc/ssh/sshrc指令檔 (預設沒有此檔案)。 • 執行使用者所指定的 shell 或命令。 • 成功登入 SSH 伺服器後, 操作方式就與以往透過 Telnet 遠端登入時完全相同 (就如同在本機前, 使用文字模式操作一樣)。
25-4 安裝與啟動 SSH 伺服器 • 大多數 Linux 發行版的光碟都已附 SSH 相關套件。要知道是否已安裝, 可執行下列指令檢查:
安裝與啟動 SSH 伺服器 • 安裝 SSH • 啟動 SSH 伺服器 • 登入 SSH 伺服器
安裝 SSH • 若沒有出現上述訊息, 表示尚未安裝 ssh。請將上列各套件所在的系統光碟放入光碟機, 掛載並切換到檔案所在的目錄後, 分別依下列方式安裝:
啟動 SSH 伺服器 • 安裝完成後, 請使用下列指令來啟動 SSH 伺服器: • 若想設定開機時自動啟動 SSH 伺服器, 則可以執行 chkconfig sshd on 指令。
登入 SSH 伺服器 • 成功啟動 SSH 後, 便可以在用戶端電腦執行 ssh 指令連接 SSH 伺服器:
登入 SSH 伺服器 • 一般而言, 安裝並啟動 SSH 伺服器後, SSH 伺服器就可以開始提供服務, 無須進一步設定。 • 不過若有特殊的需求想要進一步管理, 則必須修改其設定檔 /etc/ssh/ssh_config 的內容。
25-5 在 Linux 透過 SSH 遠端登入及傳輸檔案 • 在 Linux 主機上安裝並啟動 SSH 伺服器後, 其他的 Linux 主機只要安裝OpenSSH 的標準套件及用戶端程式, 就可以透過 SSH 相關指令連上 SSH 伺服器。安裝上述兩個套件時, 除了一些函式庫、設定檔、說明文件之外, 主要還安裝了 scp、sftp、ssh、ssh-keygen、ssh-agent、ssh-add、ssh-keyscan、sshd 及 slogin等 9 個指令, 其中 slogin 為 ssh指令的符號連結。
在 Linux 透過 SSH 遠端登入及傳輸檔案 • 以下列出上述8 個指令的主要功能: • scp:遠端複製檔案的程式 (secure copy)。 • sftp:和 scp指令類似, 一樣是遠端傳輸檔案的程式。不過它是以互動式模式來上傳和下載檔案, 和 ftp指令的操作方式相同, 但多了加密的功能。 • ssh:此為 SSH 的用戶端程式, 主要用在遠端登入, 以管理主機。
在 Linux 透過 SSH 遠端登入及傳輸檔案 • ssh-keygen:管理、產生和轉換金鑰的程式。 • ssh-agent:SSH 的認證代理程式。 • ssh-add:增加 RSA 或 DSA 認證方式到代理程式上。 • ssh-keyscan:收集別台主機 SSH 公開金鑰的指令。 • sshd:SSH 的伺服端程式。
在 Linux 透過 SSH 遠端登入及傳輸檔案 • 25-5-1 遠端傳輸檔案相關指令:scp、sftp • 25-5-2 遠端登入的相關指令:ssh、ssh-keygen、ssh-agent、ssh-add • 25-5-3 收集公開金鑰的指令:ssh-keyscan
25-5-1 遠端傳輸檔案相關指令:scp、sftp • 有關遠端傳輸檔案的指令有 scp 與 sftp 兩者, 各有優點。 • scp 指令 • sftp指令
scp 指令 • scp指令為簡易的檔案傳輸程式, 在傳輸少量已知檔案時非常好用, 以下我們分別說明如何使用此指令下載及上傳檔案。 • 從 SSH 伺服端下載檔案:
scp 指令 • A:執行 scp指令。 • B:指定遠端機器上的使用者帳號及檔案。用 ":" 隔開機器名稱及檔案名稱,如:tony@192.168.0.135:/home/tony/myfile 或 root@free.flag.com.tw:/etc/passwd。若省略使用者帳號, 則預設會用目前本機的帳號。
scp 指令 • C:若同時要下載多台機器上的檔案, 可在此加上其他遠端機器上的使用者帳號及檔案, 與 B 項之間用空白隔開即可。 • D:在本機存放檔案的路徑, 如:/tmp。 • 以下範例會分別以 tony 及 root 帳號登入 SSH 伺服器, 並下載 /home/tony/setiathome 和 /etc/passwd 檔到用戶端的 /tmp 目錄下:
scp 指令 • 上傳檔案到 SSH 伺服端主機: • A:執行 scp指令。 • B:要上傳檔案的名稱。 • C:若有其他檔案要上傳, 則填於此, 與前一個檔案用空白隔開。
scp 指令 • D:指定位於遠端機器上的帳號及檔案要儲存的路徑, 若省略使用者帳號, 會使用現在的帳號為預設值。 • 以下範例將以 tony 帳號登入 SSH 伺服器, 並上傳用戶端現行目錄下的setiathome 及 myfile 檔, 到伺服端的 /home/tony 目錄下:
scp 指令 • 只要能確定要複製什麼檔案, 並知道檔案位於何處, scp指令使用起來將非常方便。但是不清楚遠端伺服器上究竟有些什麼檔案時, 則必須使用 sftp指令。
sftp指令 • 這個指令是採用互動交談方式, 因此使用上比較容易。 • 若您曾經使用過 ftp 或 telnet指令, 一定會覺得很熟悉。 • 其操作方式如下: