SSH 概述
SSH以客戶端-伺服器模型運行,使用SSH客戶端連接到SSH伺服器。默認使用22端口,通過強大的加密技術保護通信,防止中間人攻擊和數據竊取等威脅。
SSH的主要功能
SSH提供以下主要功能:
SSH 主要功能
- 遠程命令執行: 可以直接在遠程伺服器上執行命令。
- 安全文件傳輸: `scp`(安全複製)或`sftp`(SSH文件傳輸協議)可以安全地傳輸文件。
- 端口轉發(隧道): 創建本地端口和遠程端口之間的加密隧道,以安全地訪問特定服務。
- X11 轉發: 允許在本地PC上運行遠程伺服器的GUI應用程序。
- SSH 鍵基礎認證: 提供一種更強大和方便的認證方式,使用公鑰-私鑰對,而不是密碼。
主要 SSH 命令
了解如何使用SSH命令連接到遠程伺服器並執行各種任務。通過組合各種選項來利用所需的功能。
1. 基本連接和認證
2. 高級功能及轉發
生成的命令:
請試著組合命令。
這個 Django 應用程序是一個技術指南文檔,旨在為用戶輕鬆解釋 Linux 的各種命令。
`ssh` 執行命令。
請將上述選項組合在一起,與 AI 一同虛擬執行命令。
SSH 鍵基礎認證
SSH鍵基礎認證是一種比密碼認證更安全、更方便的方法。使用公鑰和私鑰對進行認證,可以減少密碼洩露的風險。
生成SSH鍵
`ssh-keygen`命令用於生成公鑰和私鑰對。默認情況下,將生成`~/.ssh/id_rsa`(私鑰)和`~/.ssh/id_rsa.pub`(公鑰)文件。
生成SSH鍵的命令
ssh-keygen -t rsa -b 4096
在磁碟上生成新的SSH鍵對。可以設置鍵的存儲位置和密碼。
公鑰分發
將生成的公鑰(`id_rsa.pub`)添加到遠程伺服器的用戶主目錄中的`~/.ssh/authorized_keys`文件。該文件中註冊的公鑰用戶可以使用相應的私鑰無需密碼連接到伺服器。
將公鑰複製到伺服器(使用ssh-copy-id)
ssh-copy-id user@hostname
`ssh-copy-id`命令可以輕鬆地將公鑰複製到遠程伺服器上。這是最推薦的方法。
手動複製公鑰(使用scp)
scp ~/.ssh/id_rsa.pub user@hostname:~/
ssh user@hostname "mkdir -p ~/.ssh && cat ~/id_rsa.pub >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys && rm ~/id_rsa.pub"
如果無法使用`ssh-copy-id`,則可以使用`scp`將公鑰文件複製到伺服器,然後手動添加到`authorized_keys`中。
SSH 配置文件 (~/.ssh/config)
使用SSH配置文件(`~/.ssh/config`),可以提前保存常用伺服器的連接信息,以方便使用。無需每次都輸入複雜的選項,可以通過別名(Alias)簡單連接。
配置文件示例
以下是`~/.ssh/config`文件的示例。可以定義多個主機的連接設置。
config文件內容
Host myserver
HostName 192.168.1.100
User myuser
Port 2222
IdentityFile ~/.ssh/my_server_key.pem
Host dev-web
HostName dev.example.com
User webadmin
ForwardAgent yes
LocalForward 8080 localhost:80
主要設置選項
在`config`文件中可以使用的主要選項。
- Host: 此設置區塊的別名。用於`ssh myserver`。
- HostName: 實際連接的遠程主機的IP地址或域名。
- User: 連接到遠程伺服器的用戶名。
- Port: 連接的端口號。
- IdentityFile: 用於認證的私鑰文件的路徑。
- LocalForward: 設置本地端口轉發。`LocalForward [local_port] [remote_host]:[remote_port]`
- RemoteForward: 設置遠程端口轉發。`RemoteForward [remote_port] [local_host]:[local_port]`
- ForwardAgent: 啟用SSH代理轉發。在通過多個伺服器連接時非常有用。
- ServerAliveInterval: 定期向伺服器發送信號以保持SSH連接不斷開。 (以秒為單位)
- StrictHostKeyChecking: 設置是否檢查主機密鑰。`yes`或`no`
使用配置文件進行連接
ssh myserver
如果在`~/.ssh/config`文件中定義了名為`myserver`的Host別名,則可以輕鬆連接,如下所示。
使用示例
通過SSH命令的各種使用示例,學習遠程伺服器管理和文件傳輸等實際場景。
基本SSH連接
ssh testuser@192.168.1.100
使用名為testuser的用戶連接到192.168.1.100伺服器。將出現提示要求輸入密碼。
使用SSH密鑰文件進行連接
ssh -i ~/.ssh/my_key.pem ubuntu@ec2-1-2-3-4.compute-1.amazonaws.com
使用`~/.ssh/my_key.pem`私鑰文件進行連接,而不是密碼。(在雲環境中經常使用)
在遠程執行單個命令
ssh user@hostname "ls -l /var/log"
無需連接到伺服器,直接在遠程伺服器上執行`ls -l /var/log`命令並將結果帶回本地。
本地端口轉發(訪問Web服務)
ssh -L 8888:localhost:80 user@hostname
通過本地PC的8888端口訪問遠程伺服器的80端口(Web服務器)。就像Web服務器在本地一樣可以訪問。
使用SCP進行文件複製(本地 -> 遠程)
scp mylocalfile.txt user@hostname:/tmp/
將本地的`mylocalfile.txt`文件複製到遠程伺服器的`/tmp/`目錄中。
使用SCP進行文件複製(遠程 -> 本地)
scp user@hostname:/var/log/syslog .
將遠程伺服器的`/var/log/syslog`文件複製到本地PC的當前目錄。