2016-02-13 77 views
0

服務器B以例如192.168.1.130連接到專用網絡。 服務器A可以使用ssh使用其公共ip連接; 132.x.x.x. 我將如何使用ssh連接到B,以便它首先連接到A,從B連接到B,因爲B不能直接連接到外部網絡。 我想從做自己限制是: 用戶@當地:$ ssh的一個@一個我如何使用公共主機連接到私人主機?

一個@阿:$ SSH b @乙

而是我在找做什麼沿着線:

用戶@本地:$ SSH b @乙

在內部連接到@ A和則b @ b中。

我該如何實現這一套ubuntu服務器?

我試圖編輯的〜/ .ssh /配置包括

Host A 
    User a 
    HostName 192.x.x.x 
Host B 
    User b 
    ProxyCommand ssh -q A nc -q0 192.x.x.x 22 

當從 「a @ A」 運行b @ B獲得我期望的輸出,該輸出通過連​​接a至b(雖然相當無意義)。我如何才能達到這個目標,在其系統上無法編輯配置文件或類似的用戶。

PS:A有一個public ip而B被限制爲私人 ip。

編輯:編輯的示例代碼正確地意味着什麼,我想意思

+0

我想實現的是告訴世界,如果你想訪問B,使用「ssh b @ B」。我不想告訴他們有關服務器A本身,而是我希望服務器A自動通過A自動重定向請求訪問B的用戶。我擁有的是A和B都指向相同的主機,即A。因此@B與@A相同。 –

回答

0

顯然ProxyCommand可以在命令行通過-o通過;不太漂亮,但似乎是預期的方法。

https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Proxies_and_Jump_Hosts

作爲一個說明,雖然,我想你可能已經得到其中以A/B爲公共/私人倒退,因爲你最初的一段似乎違揹你的最後陳述。

關於確切解決方案http://www.cyberciti.biz/faq/linux-unix-ssh-proxycommand-passing-through-one-host-gateway-server/的更多詳細信息和圖表。

+0

'$ ssh -tt一個ssh -tt B' 工作得很好,完成了我所需要的工作。 然而,如果沒有列表A,則可以執行與上述相同的命令。另外,作爲要求,也可以使B指向A的IP地址。雖然我的主要要求是通過A –

+0

噢隧道到B;這聽起來像你有一些不兼容的要求,如(1)根本不編輯配置文件,(2)沒有在命令行中列出A.在這種情況下,除非你有腳本或者列表A,否則SSH根本無法知道主機A. – user508633

+0

假設用戶x正在連接公共ip,並且他希望連接到主機B;我需要的是他輸入ssh b @ B。 B然而與A具有相同的IP。他們都被重定向到了@A。然後系統A知道該請求不是爲了它而是主管B,然後將用戶x重定向到主機B或b @ B。 –

1

使用ProxyCommand的首選方式是使用-W開關。 nc版本要求在跳轉盒上安裝netcat

Host A 
    User a 
    HostName 192.x.x.x 
Host B 
    User b 
    ProxyCommand ssh -W %h:%p A 

而且請注意字母大小寫!在你的例子中你有那裏的大寫用戶。也不要放在那裏-q切換,直到你知道它工作正常。它不會,請在ssh命令中添加一些-vvv以查看發生了什麼以及發生了什麼故障。

+0

啊,非常有趣,我不知道SSH現在爲此目的嵌入了netcat功能。很酷的功能! (雖然我想知道它是否有任何有趣的安全隱患......) – user508633