答案1
如果可以透過以下方式存取伺服器 Bssh
並且您只需要ssh
(而不是直接scp
或sftp
),這也非常有效:
ssh -t $SERVER_A ssh $SERVER_B
即使在另一端執行單一命令時,該-t
選項也會強制分配偽終端。這很有幫助,因為ssh
需要一個偽終端。
由於您使用的是 的兩個嵌套實例ssh
,因此內部會話中的轉義字元是Enter ~ ~(兩個波浪號)。一個波形符號會將轉義傳送到第一個 shell。
答案2
ssh
除了使用連接埠轉送之外,沒有內建的方法可以做到這一點。
然而,有一種方法相當有效——sshProxyCommand
設定。您可以在每個主機的基礎上進行指定,~/.ssh/config
並使用它來指定要執行以連接到遠端 ssh 連接埠的命令。
我在多個主機上使用它:
host serverB.example.com serverB
ProxyCommand /usr/bin/ssh serverA.example.com /usr/bin/nc %h %p
ssh(1)
有關詳細信息,請參閱手冊頁,並nc(1)
從netcat
包中查看我用來轉發連接的命令。 (不過,您可以使用任何建立 TCP 連線並透過它傳遞標準輸入和輸出的東西。)