Ssh

在單個命令中使用通過中間伺服器的隧道進行 ssh 登錄?

  • July 15, 2020

有沒有辦法在單個 SSH 命令中通過 SSH 登錄到通過中間伺服器的遠端伺服器?本質上,我需要創建一條到我的“橋接伺服器”的隧道,並通過隧道登錄到遠端伺服器。

例如,我正在嘗試將以下內容壓縮為單個 ssh 命令:

  1. ssh -N -L 2222:remoteserver.com:22 bridge_userid@bridgemachine.com
  2. ssh -p 2222 remote_userid@localhost

這目前有效,但我寧願能夠將所有內容壓縮到一個命令中,這樣如果我退出我的 ssh shell,我的隧道會同時關閉。

我在我的配置中嘗試了以下方法,但無濟於事:

Host axp
 User          remote_userid
 HostName      remoteserver.com
 IdentityFile  ~/.ssh/id_rsa.eric
 ProxyCommand  ssh -W %h:%p  bridge_userid@bridgemachine.com

根據@jasonwryan 評論和transparent-mulihop 連結,我能夠使以下命令正常工作:

ssh -A -t bridge_userid@bridgemachine.com ssh -A remote_userid@remoteserver.com

但現在我想將它整齊地打包到我的 .ssh/config 文件中,並且不太確定我需要將什麼用作我的 ProxyCommand。我在網上看到了幾個連結以及@boomshadow 的需要的答案nc,但不幸的是,我用作橋接機器的 AIX 伺服器上沒有安裝 netcat。

ProxyCommand 是您所需要的。在我的公司,所有 DevOps 技術人員都必須使用“跳轉站”才能訪問 VPC 的其餘部分。jumpstation 是受 VPN 訪問控制的。

我們已經將 SSH 配置設置為自動通過 jumpstation。

這是我的 .ssh/config 文件的編輯版本:

Host *.internal.company.com
User jacob
IdentityFile ~/.ssh/id_rsa
ProxyCommand ssh -q -A jacob@company-internal-jumphost  nc -q0 %h %p

每次我對該“內部”子域上的伺服器執行“ssh”時,它都會首先自動跳過跳轉站。

編輯:這是“內部”VPC 的 .ssh/config 的整個部分,供我們登錄:

# Internal VPC
Host company-internal-jumphost
  Hostname 10.210.x.x  #(edited out IP for security)
  IdentityFile ~/.ssh/id_rsa
Host 10.210.*
  User ubuntu
  IdentityFile ~/.ssh/company-id_rsa
  ProxyCommand ssh -q -A jacob@company-internal-jumphost  nc -q0 %h %p
Host *.internal.company.com
  User jacob
  IdentityFile ~/.ssh/id_rsa
  ProxyCommand ssh -q -A jacob@company-internal-jumphost  nc -q0 %h %p

引用自:https://unix.stackexchange.com/questions/215986