SSH是Secure Shell的縮寫,是一種加密的網路協議,用於安全地遠端登入到計算機並執行命令。在Windows 10的最新版本中,Microsoft已經將OpenSSH整合到作業系統中,並且可以透過命令列使用SSH功能

suv789發表於2024-04-05

在Windows作業系統中,SSH命令通常是透過使用OpenSSH實現的。OpenSSH是一個開源的SSH實現,提供了SSH客戶端、SSH伺服器和相關的工具。在Windows 10的最新版本中,Microsoft已經將OpenSSH整合到作業系統中,並且可以透過命令列使用SSH功能。

在Windows中,您可以使用ssh命令來執行SSH連線和命令。這使得您可以在Windows命令提示符或PowerShell中透過SSH協議遠端連線到其他計算機或裝置,並執行命令。透過SSH連線,您可以安全地在遠端計算機上執行命令、上傳或下載檔案等操作,而不必在物理上訪問該計算機。

Windows的SSH命令與其他作業系統中的SSH命令類似,具有類似的選項和引數,用法也基本相同。您可以使用ssh --help命令來檢視SSH命令的使用說明,或者查閱相關的文件和資料以獲取更多資訊。

Windows SSH命令的出現使得Windows使用者能夠更方便地與其他計算機或裝置進行安全的遠端連線和通訊,而不必依賴於第三方軟體或工具。


ssh

usage:

ssh [-46AaCfGgKkMNnqsTtVvXxYy]

[-B bind_interface]

[-b bind_address]

[-c cipher_spec]

[-D [bind_address:]port]

[-E log_file]

[-e escape_char]

[-F configfile]

[-I pkcs11]

[-i identity_file]

[-J [user@]host[:port]]

[-L address]

[-l login_name]

[-m mac_spec]

[-O ctl_cmd]

[-o option]

[-p port]

[-Q query_option]

[-R address]

[-S ctl_path]

[-W host:port]

[-w local_tun[:remote_tun]] destination [command]

這是SSH命令的用法。SSH是Secure Shell的縮寫,是一種加密的網路協議,用於安全地遠端登入到計算機並執行命令。以下是一些常用的SSH選項和引數:

  • -4:強制使用IPv4地址。
  • -6:強制使用IPv6地址。
  • -A:允許代理轉發,用於透過遠端主機跳轉到其他主機。
  • -a:禁止將終端設定為原始模式。
  • -C:請求壓縮所有資料。
  • -F:指定SSH客戶端配置檔案的路徑。
  • -i:指定身份驗證金鑰檔案。
  • -l:指定要登入到遠端主機的使用者名稱。
  • -p:指定SSH服務埠,預設為22。
  • -L:設定本地埠轉發。
  • -R:設定遠端埠轉發。
  • -N:不執行遠端命令。
  • -T:禁用偽終端分配。
  • -v:詳細模式,顯示除錯資訊。
  • -X:啟用X11轉發。
  • -Y:啟用信任X11轉發。

您可以根據需要選擇適當的選項和引數來執行SSH連線和命令。如果您需要更詳細的幫助,可以使用man ssh命令來檢視SSH的手冊頁。

Windows 11 SSH 命令中各個選項的示例:

  1. -4:強制使用 IPv4 地址連線:
plaintextCopy Code
ssh -4 username@hostname

這將強制使用 IPv4 地址連線到遠端主機。

  1. -6:強制使用 IPv6 地址連線:
plaintextCopy Code
ssh -6 username@hostname

這將強制使用 IPv6 地址連線到遠端主機。

  1. -A:啟用代理代理轉發:
plaintextCopy Code
ssh -A username@hostname

這將啟用代理代理轉發功能,允許透過已連線的 SSH 會話轉發認證資訊。

  1. -C:請求壓縮所有資料傳輸:
plaintextCopy Code
ssh -C username@hostname

這將請求在 SSH 會話中壓縮資料傳輸,以減少傳輸的資料量。

  1. -i:指定身份驗證所需的私鑰檔案:
plaintextCopy Code
ssh -i path_to_private_key username@hostname

這將使用指定路徑的私鑰檔案進行身份驗證。

  1. -L:設定本地埠轉發:
plaintextCopy Code
ssh -L local_port:destination_host:destination_port username@hostname

這將設定本地埠轉發,將本地埠 local_port 上的連線轉發到遠端主機 destination_hostdestination_port 埠。

  1. -p:指定連線埠:
plaintextCopy Code
ssh -p port username@hostname

這將透過指定的埠 port 連線到遠端主機。

  1. -X:啟用 X11 轉發:
plaintextCopy Code
ssh -X username@hostname

這將啟用 X11 轉發,允許在遠端主機上執行圖形化應用並將其顯示到本地系統上。

這些示例展示了 Windows 11 SSH 命令中各個選項的用法。您可以根據需要選擇並組合這些選項來滿足您的遠端連線需求

  1. -Y:啟用安全的 X11 轉發:
plaintextCopy Code
ssh -Y username@hostname

這將啟用安全的 X11 轉發,允許在遠端主機上執行圖形化應用並將其顯示到本地系統上。

  1. -t:強制分配偽終端:
plaintextCopy Code
ssh -t username@hostname command

這將強制分配偽終端,即使遠端主機沒有 TTY 裝置。通常在執行互動式命令時使用。

  1. -v:增加詳細的輸出資訊:
plaintextCopy Code
ssh -v username@hostname

這將增加詳細的輸出資訊,用於除錯連線問題。

  1. -T:禁用偽終端分配:
plaintextCopy Code
ssh -T username@hostname

這將禁用偽終端分配,用於執行不需要互動式終端的命令。

  1. -o:使用自定義配置選項:
plaintextCopy Code
ssh -o "OptionName=value" username@hostname

這將使用自定義的 SSH 配置選項,如指定連線超時、允許的密碼認證方式等。

  1. -J:使用跳板主機進行連線:
plaintextCopy Code
ssh -J jump_user@jump_host:jump_port username@hostname

這將透過跳板主機連線到遠端主機,並使用指定的身份驗證資訊。

  1. -D:設定動態埠轉發(SOCKS代理):
plaintextCopy Code
ssh -D local_port username@hostname

這將在本地系統上建立一個動態埠轉發,將所有的TCP連線轉發到遠端主機的指定埠上。

這些示例演示了 Windows 11 SSH 命令中更多選項的用法。您可以根據您的具體需求選擇適當的選項。

  1. -N:禁止執行遠端命令:
plaintextCopy Code
ssh -N username@hostname

這將連線到遠端主機,但不會執行任何遠端命令。通常與埠轉發結合使用。

  1. -M:在後臺啟動控制連線並保持連線:
plaintextCopy Code
ssh -M -S /path/to/control_socket username@hostname

這將在後臺啟動控制連線,並使用指定路徑的控制套接字保持連線。

  1. -s:啟用子系統模式:
plaintextCopy Code
ssh -s username@hostname

這將啟用子系統模式,允許遠端主機作為子系統執行。

  1. -R:設定遠端埠轉發:
plaintextCopy Code
ssh -R remote_port:destination_host:destination_port username@hostname

這將設定遠端埠轉發,將遠端主機上的連線轉發到本地主機或其他主機的指定埠。

  1. -B:在後臺啟動遠端埠轉發:
plaintextCopy Code
ssh -fN -L local_port:destination_host:destination_port username@hostname

這將在後臺啟動遠端埠轉發,並將轉發的連線保持活動狀態。

  1. -C:啟用壓縮傳輸:
plaintextCopy Code
ssh -C username@hostname

這將啟用壓縮傳輸,減少資料傳輸的大小,從而提高傳輸速度。

  1. -i:使用指定的私鑰檔案進行身份驗證:
plaintextCopy Code
ssh -i /path/to/private_key username@hostname

這將使用指定的私鑰檔案進行身份驗證,而不是預設的 ~/.ssh/id_rsa

  1. -F:指定自定義的配置檔案:
plaintextCopy Code
ssh -F /path/to/config_file username@hostname

這將使用指定的自定義配置檔案而不是預設的 ~/.ssh/config

  1. -4-6:強制使用 IPv4 或 IPv6 地址:
plaintextCopy Code
ssh -4 username@hostname
ssh -6 username@hostname

這將分別強制使用 IPv4 或 IPv6 地址進行連線。

  1. -q:安靜模式,減少輸出資訊:
plaintextCopy Code
ssh -q username@hostname

這將減少輸出資訊,只顯示關鍵資訊,適用於批處理指令碼等情況。

  1. -o ProxyJump:透過代理跳板主機連線:
plaintextCopy Code
ssh -o ProxyJump=jump_user@jump_host:jump_port username@hostname

這將透過指定的代理跳板主機連線到遠端主機,以實現安全連線。

  1. -o ServerAliveInterval-o ServerAliveCountMax:保持連線活躍:
plaintextCopy Code
ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3 username@hostname

這將設定 SSH 客戶端保持連線活躍的間隔和最大嘗試次數,以確保連線不會因為長時間閒置而斷開。

  1. -o ForwardAgent:轉發本地 SSH 代理到遠端主機:
plaintextCopy Code
ssh -o ForwardAgent=yes username@hostname

這將在連線時啟用 SSH 代理轉發,允許在遠端主機上使用本地 SSH 代理。

  1. -o ForwardX11-o ForwardX11Trusted:啟用 X11 轉發並信任 X11 連線:
plaintextCopy Code
ssh -o ForwardX11=yes -o ForwardX11Trusted=yes username@hostname

這將啟用 X11 轉發,並信任透過 SSH 連線的 X11 客戶端。

  1. -o SendEnv-o PermitLocalCommand:傳送本地環境變數並允許本地命令執行:
plaintextCopy Code
ssh -o SendEnv=LANG -o PermitLocalCommand=yes username@hostname

這將傳送指定的本地環境變數到遠端主機,並允許在遠端主機上執行本地命令。

  1. -o VisualHostKey:以視覺化方式顯示主機金鑰指紋:
plaintextCopy Code
ssh -o VisualHostKey=yes username@hostname

這將以視覺化方式顯示遠端主機的金鑰指紋,以幫助使用者驗證主機的身份。

  1. -o StrictHostKeyChecking:嚴格驗證主機金鑰:
plaintextCopy Code
ssh -o StrictHostKeyChecking=yes username@hostname

這將在連線時嚴格驗證遠端主機的金鑰,確保連線到正確的主機。

  1. -o UserKnownHostsFile:指定使用者已知主機檔案路徑:
plaintextCopy Code
ssh -o UserKnownHostsFile=/path/to/known_hosts username@hostname

這將使用指定的使用者已知主機檔案來儲存已知的主機金鑰資訊。

  1. -o LogLevel:設定日誌級別:
plaintextCopy Code
ssh -o LogLevel=VERBOSE username@hostname

這將設定 SSH 客戶端的日誌級別為 VERBOSE,輸出更詳細的日誌資訊以便進行故障排除。

  1. -o ControlMaster-o ControlPersist:控制持久控制連線:
plaintextCopy Code
ssh -o ControlMaster=yes -o ControlPersist=60s username@hostname

這將啟用持久的控制連線,以提高後續連線的速度和效率。


Windows SSH命令的起源可以追溯到Microsoft在Windows 10的更新版本中引入的OpenSSH。OpenSSH是一個開源的SSH實現,最初是為類Unix系統(如Linux、BSD等)開發的。然而,隨著Windows作業系統越來越受到開發者和系統管理員的重視,以及在企業環境中的廣泛應用,對於在Windows上使用SSH進行安全遠端連線的需求也逐漸增加。

Microsoft意識到了這一點,並於2015年宣佈將在Windows 10中引入OpenSSH,以支援SSH客戶端和伺服器功能。隨後,在Windows 10的更新版本中,Microsoft逐步將OpenSSH整合到作業系統中,並於2017年的Fall Creators Update版本中正式釋出了SSH客戶端和伺服器的預覽版。

透過將OpenSSH整合到Windows作業系統中,Microsoft為Windows使用者提供了一個原生的、內建的SSH解決方案,使得使用者無需安裝第三方軟體或工具就可以輕鬆地在Windows系統中使用SSH協議進行安全的遠端連線和通訊。這對於開發者、系統管理員以及需要在Windows環境下進行遠端管理和開發的使用者來說,是一個重要的改進和便利。


Windows SSH命令的發展經歷了幾個階段

  1. 引入OpenSSH預覽版(2017年):在Windows 10的Fall Creators Update版本中,Microsoft首次引入了OpenSSH的預覽版。這是Windows首次整合SSH客戶端和伺服器功能的嘗試,雖然還處於預覽階段,但標誌著微軟正式開始支援SSH。

  2. OpenSSH正式釋出(2018年):隨著Windows 10的不斷更新,Microsoft逐步完善了OpenSSH在Windows上的功能,並在2018年的Windows 10 April 2018 Update版本中正式釋出了OpenSSH客戶端和伺服器的穩定版。這意味著使用者可以在Windows系統中透過命令列使用SSH協議進行安全的遠端連線。

  3. 功能增強和改進(之後版本):隨著時間的推移,Microsoft繼續改進和完善Windows中的OpenSSH功能,包括效能最佳化、安全性增強、bug修復等方面的改進。這些改進使得Windows SSH命令在穩定性和功能性上得到了進一步提升。

  4. 整合到Windows Server(之後版本):除了Windows 10之外,Microsoft還將OpenSSH整合到Windows Server作業系統中,使得Windows Server使用者也能夠享受到SSH功能帶來的便利。

Windows SSH命令經歷了從預覽版到穩定版的發展階段,微軟不斷改進和完善SSH功能,使得Windows使用者能夠更方便地使用SSH協議進行遠端連線和管理。


Windows SSH命令在以下場景中特別有用

  1. 遠端伺服器管理:透過SSH連線,管理員可以遠端管理Linux或其他支援SSH的伺服器,執行命令、上傳或下載檔案等。

  2. 開發除錯:開發人員可以使用SSH連線到遠端伺服器進行程式碼編輯、編譯、除錯等工作,而無需在本地設定開發環境。

  3. 安全檔案傳輸:透過SCP(Secure Copy Protocol)或SFTP(SSH File Transfer Protocol)協議,可以安全地傳輸檔案到遠端伺服器或從遠端伺服器下載檔案。

  4. 遠端訪問桌面:透過SSH隧道(SSH tunneling)可以安全地訪問遠端計算機的桌面環境或應用程式,保護資料傳輸的安全性。

  5. 自動化任務:結合指令碼語言(如bash、Python等),可以編寫自動化指令碼來執行定時任務、備份資料等操作。

  6. 網路裝置管理:某些網路裝置(如路由器、交換機)支援SSH協議,管理員可以使用Windows SSH命令連線到這些裝置進行管理和配置。

Windows SSH命令提供了一種安全、便捷的方式來進行遠端連線和管理,適用於許多不同的場景,特別是在需要與遠端伺服器或裝置進行互動的情況下。


除了基本的遠端連線和檔案傳輸之外,Windows SSH命令還可以用於一些高階的應用場景,包括但不限於

  1. 埠轉發和隧道設定:透過SSH隧道,可以在本地和遠端主機之間建立加密通道,用於安全地傳輸各種網路流量,包括HTTP、資料庫連線等。這對於在不受信任的網路上安全地傳輸資料非常有用。

  2. 遠端資料庫訪問:透過SSH隧道,可以安全地訪問遠端資料庫,例如MySQL、PostgreSQL等,而無需直接將資料庫暴露在公共網路上。這提供了一種安全的方法來管理和查詢遠端資料庫。

  3. 遠端監控和日誌檢視:透過SSH連線,可以實時監控遠端伺服器的效能指標、日誌檔案等,以便及時發現並解決問題。

  4. 遠端除錯和效能最佳化:開發人員可以透過SSH連線到遠端伺服器進行程式碼除錯和效能最佳化,尤其是在需要在生產環境中除錯和最佳化程式碼時非常有用。

  5. 容器管理和部署:透過SSH連線到遠端伺服器,可以管理和部署Docker容器、Kubernetes叢集等容器化環境,實現應用程式的快速部署和擴充套件。

  6. 遠端系統監控和自動化運維:結合監控工具和自動化指令碼,可以實現對遠端伺服器的實時監控和自動化運維,例如自動擴充套件、故障處理等。

這些高階應用場景需要結合其他工具和技術,但Windows SSH命令作為遠端連線的基礎工具,為這些場景的實現提供了重要的支援和基礎。


提供一些不同級別的Windows SSH命令應用例項:

初級應用例項:

  1. 遠端伺服器連線:使用ssh命令連線到遠端伺服器。

    bashCopy Code
    ssh username@hostname
  2. 檔案傳輸:使用scp命令從本地計算機上傳檔案到遠端伺服器或從遠端伺服器下載檔案到本地計算機。

    bashCopy Code
    # 從本地上傳檔案到遠端伺服器
    scp localfile.txt username@hostname:/remote/directory/
    
    # 從遠端伺服器下載檔案到本地
    scp username@hostname:/remote/file.txt localdirectory/

中級應用例項:

  1. 埠轉發:透過SSH隧道將本地埠轉發到遠端伺服器,實現安全的埠對映。

    bashCopy Code
    ssh -L localport:localhost:remoteport username@hostname
  2. 遠端執行命令:在遠端伺服器上執行命令並將結果返回到本地計算機。

    bashCopy Code
    ssh username@hostname "command"

高階應用例項:

  1. 遠端資料庫訪問:透過SSH隧道安全地訪問遠端資料庫。

    bashCopy Code
    ssh -L 3306:localhost:3306 username@hostname
  2. 遠端監控和日誌檢視:透過SSH連線遠端伺服器監控日誌檔案。

    bashCopy Code
    ssh username@hostname "tail -f /path/to/logfile.log"
  3. 遠端除錯和效能最佳化:在遠端伺服器上除錯程式碼或最佳化效能。

    bashCopy Code
    ssh username@hostname "debugging_command_or_script"

這些示例覆蓋了不同級別的應用場景,從基本的遠端連線和檔案傳輸到高階的埠轉發、資料庫訪問和遠端監控等。您可以根據自己的需求和技術水平選擇適合的應用例項進行學習和實踐。

一些將Windows SSH命令與其他命令組合的應用例項,涵蓋了不同級別的複雜度:

初級應用例項:

  1. 執行遠端命令:結合ssh命令和遠端命令,執行遠端伺服器上的命令。

    bashCopy Code
    ssh username@hostname command
  2. 上傳檔案並執行遠端命令:結合scp命令和ssh命令,將檔案上傳到遠端伺服器並執行相應的命令。

    bashCopy Code
    scp localfile.txt username@hostname:/remote/directory/ && ssh username@hostname "command"

中級應用例項:

  1. 遠端檔案壓縮和下載:結合tarzip命令、ssh命令和scp命令,遠端壓縮檔案並下載到本地計算機。

    bashCopy Code
    ssh username@hostname "tar -czf - /path/to/files" | tar -xzf - -C /local/directory
  2. 遠端檔案搜尋和操作:結合grep命令、ssh命令和awk等命令,遠端搜尋檔案並執行相應操作。

    bashCopy Code
    ssh username@hostname "grep 'keyword' /path/to/remote/files" | awk '{print $1}' > localfile.txt

高階應用例項:

  1. 遠端資料庫備份:結合資料庫備份命令、ssh命令和scp命令,遠端備份資料庫並下載到本地計算機。

    bashCopy Code
    ssh username@hostname "mysqldump -u db_user -p db_name" | gzip > backup.sql.gz && scp username@hostname:/path/to/backup.sql.gz /local/directory
  2. 遠端監控和自動化運維:結合監控指令碼、ssh命令和定時任務,遠端監控伺服器並執行自動化運維任務。

    bashCopy Code
    ssh username@hostname "monitoring_script.sh" | bash

這些組合例項結合了Windows SSH命令與其他命令,可以實現更復雜的操作,例如遠端檔案操作、資料庫備份、監控和自動化運維等。根據您的需求和技術水平,選擇適合的組合例項進行學習和實踐。

  1. -o TCPKeepAlive:保持 TCP 連線活躍:
plaintextCopy Code
ssh -o TCPKeepAlive=yes username@hostname

這將在 SSH 連線上啟用 TCP keepalive 以保持連線活躍。

  1. -o IdentityFile:指定私鑰檔案:
plaintextCopy Code
ssh -i /path/to/private_key username@hostname

這將使用指定路徑的私鑰檔案進行身份驗證,而不是預設的 ~/.ssh/id_rsa

  1. -o ControlPath:指定控制連線的路徑:
plaintextCopy Code
ssh -o ControlPath=/path/to/control_socket username@hostname

這將指定控制連線的 Unix 套接字路徑,以便多個 SSH 連線共享同一個控制連線。

  1. -o ControlPersist:控制持久控制連線的持續時間:
plaintextCopy Code
ssh -o ControlPersist=30m username@hostname

這將設定持久控制連線的持續時間為 30 分鐘,在此期間可以重複使用該連線。

  1. -o Compression:啟用 SSH 資料壓縮:
plaintextCopy Code
ssh -o Compression=yes username@hostname

這將啟用 SSH 資料壓縮,以減少資料傳輸時的網路頻寬佔用。

  1. -o PasswordAuthentication:指定是否允許密碼身份驗證:
plaintextCopy Code
ssh -o PasswordAuthentication=yes username@hostname

這將允許使用密碼進行身份驗證,而不是依賴於金鑰身份驗證。

  1. -o PreferredAuthentications:指定首選身份驗證方法:
plaintextCopy Code
ssh -o PreferredAuthentications=publickey,password username@hostname

這將優先使用公鑰身份驗證,如果不可用則使用密碼身份驗證。

  1. -o GlobalKnownHostsFile:指定全域性已知主機檔案路徑:
plaintextCopy Code
ssh -o GlobalKnownHostsFile=/path/to/global_known_hosts username@hostname

這將指定全域性已知主機檔案的路徑,用於儲存全域性已知的主機金鑰資訊。

  1. -o GSSAPIAuthentication:啟用 GSSAPI 身份驗證:
plaintextCopy Code
ssh -o GSSAPIAuthentication=yes username@hostname

這將啟用 GSSAPI 身份驗證,通常用於與 Kerberos 等身份驗證系統整合。

  1. -o HostbasedAuthentication:啟用基於主機的身份驗證:
plaintextCopy Code
ssh -o HostbasedAuthentication=yes username@hostname

這將啟用基於主機的身份驗證,其中客戶端的身份由主機和使用者組成。

  1. -o ProxyJump:指定跳板主機進行連線:
plaintextCopy Code
ssh -o ProxyJump=jump_host username@hostname

這將透過跳板主機 jump_host 進行連線到目標主機 hostname

  1. -o ProxyCommand:指定自定義代理命令進行連線:
plaintextCopy Code
ssh -o ProxyCommand="ssh -W %h:%p jump_host" username@hostname

這將使用自定義的代理命令 ssh -W %h:%p jump_host 進行連線。

  1. -o DynamicForward:設定動態埠轉發:
plaintextCopy Code
ssh -D 1080 username@hostname

這將在本地主機上建立一個 SOCKS 代理,使用遠端主機 hostname 進行動態埠轉發。

  1. -o PermitLocalCommand:允許執行本地命令:
plaintextCopy Code
ssh -o PermitLocalCommand=yes username@hostname

這將允許在 SSH 連線上執行本地命令。

  1. -o ClearAllForwardings:清除所有埠轉發:
plaintextCopy Code
ssh -o ClearAllForwardings=yes username@hostname

這將在連線時清除所有已設定的埠轉發規則。

相關文章