2つのSSHトンネルを介してX11を転送する

2つのSSHトンネルを介してX11を転送する

仕事で、マシン B にアクセスするには、ローカル マシンからマシン A を経由して SSH する必要があります。問題は、マシン A に X11 転送機能がなく、それを変更するためのスーパーユーザー権限がないことです。マシン B ではスーパーユーザー権限があり、X11 転送はオンになっています。

A で X11 転送をオンにせずに、B から A を経由してローカル マシンに X11 を転送する方法はありますか?

実行してみました がssh -t -X user@A ssh -X user@Bssh -t user@A ssh -X user@B マシン A はX11 forwarding request failed on channel 0ログイン時にまだ出力します。

答え1

~.ssh/config に以下を追加します:

Host BviaA
  HostName      hostB
  ProxyCommand  ssh user@hostA nc %h %p 2> /dev/null

そうすればssh -X user@BviaAうまくいくはずだ

上記の設定セクションでは、Host BviaA何が起こるかをより明確にするために を使用しています。また、 を使用するHost hostBことで、完全に透過的に動作させることもできます: ssh -X user@hostB(ゲートウェイが不要であるかのように)。

あるいは、構成を変更せずにテストするためのワンライナーとして:

ssh -X -oProxyCommand="ssh user@hostA nc %h %p" user@hostB

答え2

@rudimeierさん、ご回答ありがとうございます。

私は問題を抱えていましたいいえsshを使用する場合のオプションですが、このバリエーション(@aDroidの説明に基づく)ここ)は私の場合はうまくいきました。つまり、これは本質的に同じですワンライナーの答えOpenSSH の新しいバージョンについては @rudimeier をご覧ください:

$ ssh -X -oProxyCommand="ssh [email protected] -W %h:%p" [email protected]

翻訳者答え私の場合もうまくいきました(あなたにも感謝します)。

私のような初心者に仕組みを明確にするために、両方の手順でユーザー名を追加します (1 番目のコマンドを入力すると、localhost ポート 2222 はマシン B のポート 22 のように動作します。そのため、2 番目のコマンドではマシン B のユーザー名を渡します)。

$ ssh -Nf -L2222:destination.host-B.address:22 [email protected]
$ ssh -p 2222 -X userB@localhost

答え3

A経由でポート転送できる場合があります。

$ ssh -Nf -L2222:B:22 A

ローカルマシンからAを経由してBに転送するsshプロセスを開始してバックグラウンドで実行します。次に、

$ ssh -p 2222 -X localhost

関連情報