簡體   English   中英

請調試 SSH 代理命令,它無法在 PuTTY 上使用 multihop SSH 連接遠程服務器

[英]Please debug SSH Proxy Command, it cannot connect remote server with multihop SSH on PuTTY

我想將以下~/.ssh/config從工作的 Mac 設置復制到 Windows PuTTY。

Host server01
    HostName 11.22.333.444
    Port 55555
    DynamicForward 1080
    User username
    RemoteForward        52698 localhost:52698

Host server02
    HostName work-machine-name
    ProxyCommand ssh -q server01 nc work-machine-name 22
    User username
    RemoteForward        52698 localhost:52698 

這是我覺得在 PuTTY 上不正確的當前代理命令:

plink -ssh 11.22.333.444 -P 55555 -l username -D 1080 -R 52698:127.0.0.1:52698 -nc %host:%port

細節:

我正在嘗試使用 SSH 代理在 PuTTY 上設置多跳,以便我可以在我的 Windows 計算機上使用遠程 Atom文本編輯器在遠程機器上工作。 Multihop 意味着首先我必須 SSH 進入中間機器,然后登錄到最終機器。

在 Mac 上,我只是在 Atom 遠程 package 上啟動服務器,在終端上運行ssh server02 ,輸入兩個登錄名的密碼以進入遠程機器,然后運行rmate filename使遠程文件自動顯示在 Mac Atom 編輯器上這個室友

目前我正在嘗試在我的 Windows PuTTY 上復制所有內容。 我遵循了 SSH 教程中的這個 multihop並參考了plink 手冊

首先,我將“C:\Program Files (x86)\PuTTY”永久添加到 PATH。 然后我對 PuTTY 進行了以下設置,試圖准確復制 ~/.ssh/config:

  • Session 主機名: work-machine-name ,端口: 22
  • 連接 -> 數據 自動登錄用戶名: username
  • 連接 -> 代理 代理類型: Local ,代理主機名: 11.22.333.444 ,端口: 55555 ,Te.net 命令或本地代理命令: plink -ssh 11.22.333.444 -P 55555 -l username -D 1080 -R 52698:127.0.0.1:52698 -nc %host:%port
  • 連接 -> SSH -> 隧道 window 顯示遠程端口轉發: R52698 localhost:52698

當我嘗試運行所有程序時,我得到一個空白的大黑屏。 我懷疑我的 ProxyCommand 設置不正確。

(順便說一句,通過我的 Mac 設置,我發現 X11 是完全不必要的。)

為了調試,我在 cmd 提示符下運行了 ProxyCommand plink 行:

C:\Users\username>plink -ssh 11.22.333.444 -P 55555 -l username -D 1080 -R 52698:127.0.0.1:52698 -nc work-machine-name:22
username@11.22.333.444's password:
SSH-2.0-OpenSSH_6.6.1

輸入密碼后它掛在那里。 在 Mac 上,它也會要求輸入第二個密碼,然后連接到遠程工作機器。

您面臨的問題似乎是“標准”ssh 工具和膩子之間的不兼容

一些可能的解決方法是使用cygwin ssh、 用於 windows 的 linux 子系統mobaxterm (基本上是 cygwin + 更好的終端模擬器和嵌入式 x11 服務器)

它們都使用與 linux 和 mac 相同的配置文件格式,因此您現有的配置應該可以工作

這些是一些想法,您的用例非常特殊,可能是實現您需要的更好的工具,為了簡化您可能在設備之間使用 VPN 的所有代理,但要專注於 SSH 端,我建議檢查如何完成轉發以及如何使用膩子測試(堡壘)設置。

轉發

可能發生的情況是,在您的 Windows 客戶端中,未轉發 ssh 密碼,這在執行以下操作時有效:

ssh -A 

來自男人:

-A 啟用身份驗證代理連接的轉發。 這也可以在配置文件中針對每個主機進行指定。

在 Windows 中使用膩子來實現類似的東西時,您需要使用調用Pageant東西。

Pageant 是 PuTTY 身份驗證代理。 它將您的私鑰保存在內存中,以便您在連接到服務器時都可以使用它們。 它消除了以下需要:

  • 顯式指定每個 Linux 用戶帳戶的相關密鑰,如果您使用多個帳戶登錄服務器

  • 每次登錄用戶帳戶時輸入密鑰的密碼; 並且您的密鑰應該受密碼保護,因為擁有未受保護的密鑰與將密碼隱藏在鍵盤下一樣好!

要了解有關如何配置客戶端的更多信息,請遵循本指南: https : //www.digitalocean.com/community/tutorials/how-to-use-pageant-to-streamline-ssh-key-authentication-with-putty

堡壘 - ssh 隧道

檢查本指南, https://blog.devolutions.net/2017/04/how-to-configure-an-ssh-tunnel-on-putty.html

我只是有類似的需求,但我的中間服務器不允許 netcat。 我想出的解決方案是對 ssh 使用-W標志(我使用的是 OpenSSH),並且可以使用與您已經在 mac 上使用的配置類似的 ssh 配置來完成。

Windows 上 ssh 配置的默認位置是 - C:\\Users\\$username$\\.ssh\\config

Host server01
    HostName 11.22.333.444
    Port 55555
    User username

Host server02
    HostName work-machine-name
    ProxyCommand C:\Windows\System32\OpenSSH\ssh.exe -W %h:%p server01
    User username

關於配置的兩個注意事項:

  • 該文件可能不存在,但您可以自己創建它,注意它沒有擴展名。
  • ProxyCommand可能很難找到 ssh.exe,因此這里最好使用絕對路徑。

如果您更喜歡避免使用ssh_config並使用命令行來執行此操作,則可能需要使用:

ssh -t username@11.22.33.4444 "ssh -t username@work-machine-name"

我希望它會在將來對某人有所幫助。

假設我們想要ssh通過8.8.8.8172.16.0.21

兩台主機的登錄名都是john

私鑰的路徑是C:\users\john\.ssh\private.ppk

在此處輸入圖像描述

在此處輸入圖像描述 在此處輸入圖像描述

.

plink.exe -v -ssh %user@%proxyhost -P %proxyport -nc %host:%port   -i "c:\Users\john\.ssh\private.ppk"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM