什麼是 SSH?
SSH 代表安全外殼協定(Secure Shell)。透過 SSH,您可以安全地存取遠端主機,因為連線是加密的。使用 Linux 終端機的 ssh 指令,我們可以連線到遠端 Linux 伺服器,並像在自己的電腦上一樣工作。在本教學結束時,您將完全了解如何使用 SSH 連線到遠端的 Ubuntu.
語法
語法是您使用 ssh 指令的規則。您可以重新排列語法,但必須遵循直接的格式。以下是使用 ssh 指令的語法範例:
|
1 |
ssh remote_host |
您要連線的網域名稱或 IP 位址就是如上述指令中所示的 remote_host。此語法假設您在遠端系統和本機系統上的使用者名稱相同。然而,如果使用者名稱不同,您可以使用此指令來表示:
|
1 |
ssh remote_username@remote_host |
在連線到伺服器時,您需要立即提供密碼以驗證您的身分。輸入指令 exit 即可返回您的本機工作階段。
如何設定 SSH
Ubuntu 中主要的 sshd 設定檔位於 /etc/ssh/sshd_config。如果您變更了 SSH 設定,SSHD 伺服器設定將會自動變更。在進行任何設定之前,請確保使用此指令備份該檔案的目前版本:
|
1 |
sudo cp /etc/ssh/sshd_config{,.bak} |
使用文字編輯器開啟它:
|
1 |
sudo nano /etc/ssh/sshd_config |
您應該保留此檔案中的大部分參數。然而,有幾件事您需要注意:
|
1 |
Port 22 |
連接埠宣告指示了 SSHD 伺服器等待連線的連接埠。預設值為 22。除非有特定原因,否則您不需要變更此設定:
|
1 2 3 |
HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_dsa_key HostKey /etc/ssh/ssh_host_ecdsa_key |
主機金鑰宣告指示了全域主機金鑰的位置:
|
1 2 |
SyslogFacility AUTH LogLevel INFO |
這兩個項目指示了應記錄的日誌層級。如果您在使用 SSH 時遇到問題,增加日誌數量是找出問題的絕佳方法:
|
1 2 3 |
LoginGraceTime 120 PermitRootLogin yes StrictModes yes |
這些選項定義了登入的一些資訊,以在設定檔不安全時防止未授權的登入:
|
1 2 |
X11Forwarding yes X11DisplayOffset 10 |
這些參數設定被稱為 X11 轉發功能。透過這種方式,您可以在本機系統上顯示遠端系統的 GUI。您必須在伺服器上啟用此選項,同時在連線到 SSH 用戶端時使用 -X 選項。
進行變更後,儲存檔案並按下 CTRL-X 和 Y,然後按下 Enter 關閉它。如果您變更了 /etc/ssh/sshd_config 中的設定,您必須重新啟動 sshd 伺服器以執行變更:
|
1 |
sudo service ssh restart |
對於 systemd 系統(例如 Ubuntu 16.04 或 Debian Jessie),請使用此指令:
|
1 |
sudo systemctl restart ssh |
徹底測試您的變更,以確保一切運作正常。如果您進行了任何變更,您可能應該保持某些工作階段處於作用中狀態。透過這種方式,您可以在必要時還原設定。
如何使用金鑰登入 SSH?使用密碼登入遠端系統是不錯的方法。然而,最好是設定基於金鑰的驗證。
什麼是基於金鑰的驗證?
金鑰型驗證會建立兩對金鑰,稱為私鑰和公鑰。私鑰位於使用者的電腦上,並已受到保護且保持機密。公鑰可以提供給任何人,或儲存在您想要存取的任何伺服器上。如果您嘗試使用金鑰對進行連線,伺服器會使用公鑰為使用者電腦產生一條訊息。使用者只能使用私鑰來讀取該訊息。接著,使用者電腦會向伺服器傳送回覆,伺服器便得知該使用者是真實的。設定好金鑰後,整個程序會自動在背景完成。
如何建立 SSH 金鑰
SSH 金鑰應該在您希望用來登入的電腦上產生。這通常是您的本機電腦。請在命令列中輸入以下內容:
|
1 |
ssh-keygen -t rsa |
然後,按下 ENTER 鍵以接受預設值。它將在 ~/.ssh/id_rsa.pub 和 ~/.ssh/id_rsa 產生您的金鑰。接下來,輸入以下命令以切換到 .ssh 目錄:
|
1 |
cd ~/.ssh |
這些是檔案權限:
|
1 |
ls -l |

如您所見,只有擁有者可以讀取和寫入 id_rsa 檔案。因此,您必須妥善保管它。不過,您可以分享 id_rsa.pub 檔案,並為此操作設定適當的權限。下一步是使用以下語法將公鑰傳輸到伺服器:
|
1 |
ssh-copy-id remote_host |
這會啟動一個 SSH 工作階段,您必須使用密碼進行驗證。輸入密碼後,您的公鑰將被複製到伺服器’的授權金鑰檔案中,以便您下次無需密碼即可登入。
如何停用密碼驗證
如果已產生 SSH 金鑰,您可以透過停用僅限密碼驗證來提高伺服器的安全性。您可以使用私鑰(且伺服器上已安裝公鑰)登入伺服器,而無需使用主控台。
注意:在進行此步驟之前,請確保您已在伺服器上安裝公鑰。否則您將被拒之門外!
使用此命令開啟 sshd 設定檔:
|
1 |
sudo nano /etc/ssh/sshd_config |
藉由刪除開頭的 #,找到並取消註釋寫有密碼驗證檢查(PasswordAuthentication)的那一行。然後您可以將值變更為 “no”:
|
1 |
PasswordAuthentication no |
PubkeyAuthentication 和 ChallengeResponseAuthentication 為預設設定,看起來應該像這樣:
|
1 2 |
PubkeyAuthentication yes ChallengeResponseAuthentication no |
您不應該變更這兩項設定。之後,在進行變更後儲存並關閉檔案。接下來,使用以下命令重新啟動 SSH 守護行程:
|
1 |
sudo systemctl restart ssh |
最後,您已停用密碼驗證,現在只能使用 SSH 金鑰驗證來存取您的伺服器。
結論
在本教學中,我們向您展示了如何在 Ubuntu 中使用 SSH 安全地連線到遠端伺服器。如果您是系統管理員,學習如何使用 SSH 是非常基礎且重要的,因此在掌握本教學後,您可以繼續學習 SSH 的更多進階功能。
祝您使用愉快!
留言
目前尚無留言。成為第一個留言的人吧。