如何從 Windows 上用 SSH 連線到 Linux
使用開源的 PuTTY 工具,從 Windows 建立到 Linux 的 SSH 連線。
在 Linux 世界中,安全外殼(SSH)協議是最為常用的、透過命令列控制遠端計算機的方式。SSH 是真正的 Linux 原創,但是它在 Windows 世界中也越來越流行。甚至有了一份官方的 Windows 的 SSH 文件,那篇文件闡述了使用 OpenSSH 控制 Windows 的方法。
這篇文章展示瞭如何使用了流行的開源工具 PuTTY,建立一個從 Windows 到 Fedora 33 Linux 系統的 SSH 連線。
使用 SSH 的方法
SSH 使用客戶端-伺服器模式,即 SSH 客戶端會建立到 SSH 服務端的連線。SSH 伺服器通常會作為守護程式執行,所以它常被稱為 SSHD。你很難找到一個不自帶 SSH 守護程式的 Linux 發行版。在 Fedora 33 中,已安裝了 SSH 守護程式,但是並未啟用。
你可以使用 SSH 控制幾乎所有的 Linux 機器,無論它是作為虛擬機器還是作為網路上的物理裝置執行。一個常見的用例是無頭配置的嵌入式裝置,如樹莓派。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-[...]
如果它處於未啟用狀態,使用 systemctl start sshd
命令啟動它。
2、設定遠端控制檯
在 Windows 下 下載 PuTTY 安裝程式,然後安裝並開啟它。你應看到一個像這樣的視窗:
在“主機名(或 IP 地址)”輸入框,鍵入你的 Linux 系統的連線資訊。本文設定了一個 Fedora 33 虛擬機器,它使用橋接網路介面卡,使我可以由 IP 地址 192.168.1.60
連線這個系統。點選“開啟”,應會如圖示的開啟一個視窗:
這是 SSH 的安全措施之一,是為了防止中間人攻擊。訊息中的指紋應該匹配 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)
點選“是”以確認 PuTTY 的安全提示。主機系統的指紋現在儲存在 PuTTY 的信任列表中,其位於 Windows 的登錄檔中的:
HKEY_CURRENT_USER\SOFTWARE\SimonTatham\PuTTY\SshHostKeys
輸入正確的登入憑證,然後你應該進入控制檯了,位置在你的使用者主目錄。
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 埠暴露在公網,因為:
- 這個服務透過 HTTP 而非 HTTPS 執行
- 根本沒有使用者管理和登入系統
乍一看,建立這種架構不產生可怕的漏洞似乎是不可能的。但是 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,轉到 “連線 -> SSH -> 隧道”。加入你要轉發的兩個 TCP 埠:
- 源:
7000
/ 目標:localhost:7000
- 源:
8000
/ 目標:localhost:8000
然後返回 “會話” 部分,並像之前那樣建立一個 SSH 連結。開啟網頁瀏覽器,然後轉到 http://localhost:7000
;你應該看見像這樣的視窗:
你成功的設定了埠轉發!
警告: 如果你選擇在公網上暴露 TCP 埠 22 ,不要使用易於猜測的登入憑證。你將接受來自全世界的登入請求,它們使用常見的、標準的登入憑證以嘗試登入你的 Linux 機器。相反,只允許已知的使用者登入。這種登入限制可以透過 公鑰加密 來實現,它使用一個金鑰對,其中公鑰儲存在 SSH 主機上,而私鑰保留在客戶端。
除錯
如果你難以連線你的 Linux 機器,你可以跟蹤你的 SSH 守護程式的處理過程:
journalctl -f -u sshd
這是一個普通的登入程式,但是其日誌級別為 DEBUG,它看起來是這樣的 :
瞭解更多
這篇文章幾乎沒有涉及到使用 SSH 的方法。如果你正在尋找一個特定用例的資訊,你也許可以在網際網路中找到無數的教程。我在工作中使用 PuTTY ,因為它易於設定,在兩個作業系統間又具有良好的可操作性,使得它成為連線解決方案裡的瑞士軍刀。
(文內圖片來自:Stephan Avenwedde,CC BY-SA 4.0)
via: https://opensource.com/article/21/6/ssh-windows
作者:Stephan Avenwedde 選題:lujun9972 譯者:yjacks 校對:wxy
相關文章
- dockerSSH用ssh連線到dockerDocker
- 使用 SSH 遠端連線到 Linux 伺服器Linux伺服器
- 從kali安裝到ssh連線kali虛擬機器虛擬機
- 如何除錯SSH連線除錯
- Frp分別用tcp和stcp模式ssh連線到內網LinuxFRPTCP模式內網Linux
- Linux 做 SSH 免密連線 Windows 踩坑記錄LinuxWindows
- phpStorm 如何用 FTP,SSH 連線到虛擬機器 Linux 系統?PHPORMFTP虛擬機Linux
- Windows Terminal 自定義 SSH 連線Windows
- 如何管理多個 SSH 連線
- 如何 SSH 登入到 Linux 上的特定目錄Linux
- linux之間連線—使用SSHLinux
- VNC連線,VNC如何連線WindowsVNCWindows
- 從Windows到LinuxWindowsLinux
- 在linux上通過ssh直接登入到windows系統上,不用密碼LinuxWindows密碼
- Linux開啟ssh連線putty教程Linux
- linux 遠端連線ssh錯誤Linux
- linux 下 github ssh 無法連線LinuxGithub
- 如何在 Linux 上用 IP轉發使內部網路連線到網際網路Linux
- 如何從 InfluxDB/OpenTSDB 無縫連線到 TDengineUX
- ssh遠端連結(簡易連線linux命令)Linux
- 從連線到資料(一)
- 從連線到資料(二)
- 從連線到資料(三)
- SSH連線Linux中文亂碼問題Linux
- SSH遠端連線Linux伺服器Linux伺服器
- 遠端連線Kali Linux使用PuTTY實現SSH遠端連線Linux
- SSH服務連線
- Ssh連線過慢
- 如何去除從windows上傳到unix的前導符^MWindows
- SSH遠端連線 Linux 伺服器教程Linux伺服器
- Linux網路-ssh遠端連線協議Linux協議
- Linux 上用 IP轉發使內部網路連線到網際網路Linux
- 如何連線到HybridDB(Greenplum)
- 如何在linux上手動連線到網際網路Linux
- windows的盤掛到linux上WindowsLinux
- 使用串列埠連線到Linux串列埠Linux
- 解決使用SSH連線Linux伺服器時連線失敗的故障Linux伺服器
- 如何利用SSH通道來連線遠端的MysqlMySql