Linux中國

如何從 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](/data/attachment/album/202207/23/110048szd6dh4pfhdd7zmm.png "PuTTY configuration screen")

在「 主機名(或 IP 地址) Host Name (or IP address) 」輸入框,鍵入你的 Linux 系統的連接信息。本文設置了一個 Fedora 33 虛擬機,它使用橋接網路適配器,使我可以由 IP 地址 192.168.1.60 連接這個系統。點擊「 打開 Open 」,應會如圖示的打開一個窗口:

![PutTTY security alert](/data/attachment/album/202207/23/110048gnyjeahjzynsspe5.png "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_USERSOFTWARESimonTathamPuTTYSshHostKeys

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

![Logged in to SSH](/data/attachment/album/202207/23/110049q1v4tgcov47dvoob.png "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)"PuTTYpscp.exe stephan@192.168.1.60:/home/stephan/MyFile.txt .

要從 Windows 主目錄複製文件到 Linux 用戶主目錄,輸入:

C:"Program Files (x86)"PuTTYpscp.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](/data/attachment/album/202207/23/110049jm4rapms266sc7z6.png "Port forwarding in PuTTY")

然後返回 「 會話 Session 」 部分,並像之前那樣建立一個 SSH 鏈接。打開網頁瀏覽器,然後轉到 http://localhost:7000;你應該看見像這樣的窗口:

![Pythonic](/data/attachment/album/202207/23/110049jhw6cd6mbk67dgwk.png "Pythonic")

你成功的設置了埠轉發!

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

調試

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

journalctl -f -u sshd

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

![LogLevel DEBUG output](/data/attachment/album/202207/23/110050lizdhug1zr2ghaz1.png "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中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國