如何從 Windows 上用 SSH 連線到 Linux

Stephan Avenwedde發表於2022-07-23

使用開源的 PuTTY 工具,從 Windows 建立到 Linux 的 SSH 連線。

如何從 Windows 上用 SSH 連線到 Linux

在 Linux 世界中,安全外殼secure shell(SSH)協議是最為常用的、透過命令列控制遠端計算機的方式。SSH 是真正的 Linux 原創,但是它在 Windows 世界中也越來越流行。甚至有了一份官方的 Windows 的 SSH 文件,那篇文件闡述了使用 OpenSSH 控制 Windows 的方法。

這篇文章展示瞭如何使用了流行的開源工具 PuTTY,建立一個從 Windows 到 Fedora 33 Linux 系統的 SSH 連線。

使用 SSH 的方法

SSH 使用客戶端-伺服器模式,即 SSH 客戶端會建立到 SSH 服務端的連線。SSH 伺服器通常會作為守護程式Daemon執行,所以它常被稱為 SSHD。你很難找到一個不自帶 SSH 守護程式的 Linux 發行版。在 Fedora 33 中,已安裝了 SSH 守護程式,但是並未啟用。

你可以使用 SSH 控制幾乎所有的 Linux 機器,無論它是作為虛擬機器還是作為網路上的物理裝置執行。一個常見的用例是無頭headless配置的嵌入式裝置,如樹莓派。SSH 也可以用做一個其它網路服務的隧道。因為 SSH 連線是加密的,所以你可以使用 SSH 作為一個任何預設不提供加密的協議的傳輸層。

在這篇文章中,我將解釋使用 SSH 的四個方式:1、如何在 Linux 端配置 SSH 守護程式;2、如何設定遠端控制檯連線;3、如何透過網路複製檔案,4. 如何將 SSH 作為某些協議的隧道。

1、配置 SSHD

將 Linux 系統(文中是 Fedora 33)作為 SSH 伺服器,允許 PuTTY SSH 客戶端進行連線。首先,檢查守護程式的 SSH 配置。配置檔案放在 /etc/ssh/sshd_config,它包含了許多選項,透過取消掉相關行的註釋就可以啟用:

#       $OpenBSD: sshd_config,v 1.100 2016/08/15 12:32:04 naddy Exp $

# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

Include /etc/ssh/sshd_config.d/*.conf

#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

沒有取消任何註釋的預設配置在這個示例中應該是可以工作的。要檢查 SSH 守護程式是否已經執行,輸入 systemctl status sshd

$ systemctl status sshd
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2018-06-22 11:12:05 UTC; 2 years 11 months ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 577 (sshd)
    Tasks: 1 (limit: 26213)
   CGroup: /system.slice/sshd.service
           └─577 /usr/sbin/sshd -D -oCiphers=[aes256-gcm@openssh.com][5],chacha20-[...]

如果它處於未啟用inactive狀態,使用 systemctl start sshd 命令啟動它。

2、設定遠端控制檯

在 Windows 下 下載 PuTTY 安裝程式,然後安裝並開啟它。你應看到一個像這樣的視窗:

PuTTY configuration screen

在“主機名(或 IP 地址)Host Name (or IP address)”輸入框,鍵入你的 Linux 系統的連線資訊。本文設定了一個 Fedora 33 虛擬機器,它使用橋接網路介面卡,使我可以由 IP 地址 192.168.1.60 連線這個系統。點選“開啟Open”,應會如圖示的開啟一個視窗:

PutTTY security alert

這是 SSH 的安全措施之一,是為了防止中間人攻擊man-in-the-middle attack。訊息中的指紋應該匹配 Linux 系統中放在 /etc/ssh/ssh_host_ed25519_key.pub 的金鑰。PuTTY 將這個金鑰以 MD5 雜湊值 的方式列印出來。要檢查它的真實性,切換到 Linux 系統並開啟一個控制檯,然後輸入:

ssh-keygen -l -E md5 -f /etc/ssh/ssh_host_ed25519_key.pub

輸出應該和 PuTTY 展示的指紋一致:

$ ssh-keygen -l -E md5 -f /etc/ssh/ssh_host_ed25519_key.pub
256 MD5:E4:5F:01:05:D0:F7:DC:A6:32 no comment (ED25519)

點選“Yes”以確認 PuTTY 的安全提示。主機系統的指紋現在儲存在 PuTTY 的信任列表中,其位於 Windows 的登錄檔中的:

HKEY_CURRENT_USER\SOFTWARE\SimonTatham\PuTTY\SshHostKeys

輸入正確的登入憑證,然後你應該進入控制檯了,位置在你的使用者主目錄。

Logged in to SSH

3、透過網路複製檔案

除了遠端控制檯,你同樣可以使用 PuTTY 透過 SSH 來傳輸檔案。PuTTY 的安裝目錄在 C:\Program Files (x86)\PuTTY,在該目錄下尋找 ppscp.exe。你既可以使用它從 Linux 系統複製檔案,也可以複製檔案到 Linux 系統。

使用 Windows + R 然後輸入 cmd 來開啟命令提示符,從你的 Linux 使用者主目錄複製 MYFile.txt 到你的 Windows 主目錄,輸入:

C:\"Program Files (x86)"\PuTTY\pscp.exe stephan@192.168.1.60:/home/stephan/MyFile.txt .

要從 Windows 主目錄複製檔案到 Linux 使用者主目錄,輸入:

C:\"Program Files (x86)"\PuTTY\pscp.exe MyFile.txt stephan@192.168.1.60:/home/stephan/

就像你也許已經發現的那樣,複製的命令通常構造為:

pscp.exe <source> <target>

4、隧道化一個協議

假設你擁有一個 Linux 機器,為某些特別的應用執行一個基於 HTTP 的服務。你想從你的 Windows 機器透過網際網路訪問這個 HTTP 服務。而且,你不能將相關的 TCP 埠暴露在公網,因為:

  1. 這個服務透過 HTTP 而非 HTTPS 執行
  2. 根本沒有使用者管理和登入系統

乍一看,建立這種架構不產生可怕的漏洞似乎是不可能的。但是 SSH 可簡單的為這種情況建立一個安全的解決方案。

我將用我的軟體專案 Pythonic 來演示這個過程。在容器中執行。Pythonic 作為容器執行,開放兩個 TCP 埠:TCP 埠 7000(主要編輯器)和 TCP 埠 8000(code-server 程式碼編輯器)。

要在一個 Linux 機器上安裝 Pythonic ,執行:

podman pull pythonicautomation/pythonic
podman run -d -p 7000:7000 -p 8000:8000 pythonic

轉向你的 Windows 機器,開啟 PuTTy,轉到 “連線Connection -> SSH -> 隧道Tunnels”。加入你要轉發的兩個 TCP 埠:

  • 源:7000 / 目標:localhost:7000
  • 源:8000 / 目標:localhost:8000

Port forwarding in PuTTY

然後返回 “會話Session” 部分,並像之前那樣建立一個 SSH 連結。開啟網頁瀏覽器,然後轉到 http://localhost:7000;你應該看見像這樣的視窗:

Pythonic

你成功的設定了埠轉發!

警告: 如果你選擇在公網上暴露 TCP 埠 22 ,不要使用易於猜測的登入憑證。你將接受來自全世界的登入請求,它們使用常見的、標準的登入憑證以嘗試登入你的 Linux 機器。相反,只允許已知的使用者登入。這種登入限制可以透過 公鑰加密 來實現,它使用一個金鑰對,其中公鑰儲存在 SSH 主機上,而私鑰保留在客戶端。

除錯

如果你難以連線你的 Linux 機器,你可以跟蹤你的 SSH 守護程式的處理過程:

journalctl -f -u sshd

這是一個普通的登入程式,但是其日誌級別為 DEBUG,它看起來是這樣的 :

LogLevel DEBUG output

瞭解更多

這篇文章幾乎沒有涉及到使用 SSH 的方法。如果你正在尋找一個特定用例的資訊,你也許可以在網際網路中找到無數的教程。我在工作中使用 PuTTY ,因為它易於設定,在兩個作業系統間又具有良好的可操作性,使得它成為連線解決方案裡的瑞士軍刀。

(文內圖片來自:Stephan Avenwedde,CC BY-SA 4.0


via: https://opensource.com/article/21/6/ssh-windows

作者:Stephan Avenwedde 選題:lujun9972 譯者:yjacks 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

相關文章