リモートホストでのSSHリダイレクトの実装

リモートホストでのSSHリダイレクトの実装

私の問題は説明した問題と似ています。ここ。ホストA、B、Cの3つがあります。

Aは私の家のコンピュータです。

Bはインターネットに接続された大学のサーバーです。

Cは大学のオフィスのコンピュータである。サーバーと同じローカルネットワークに接続されています。したがって、A -> BおよびB -> CではSSHを使用できますが、A -> CではSSHを使用できません。 AからCへ直接接続したいです。

ソリューションの説明をよく書いてください。ここ

しかし、私の問題は、このソリューションがホストAに適用されているのに対して、私は同じ接続を必要とする他のユーザーが簡単に使用できるようにホストBに展開できるソリューションを好むということです。ここで私が気付いたのは、ほとんどのユーザーがコンピュータ技術のない教師であるということです。助けてください。

ベストアンサー1

まず、この新しいソリューションは外部ツールに依存しないため、ここのソリューションは質問に提供されているリンクに提供されているソリューションよりも優れていますnetcat。たとえば、次のようになります。

Host C
  ProxyCommand ssh -W %h:%p B

ホスト.ssh/configAでは、ユーザーは特定のコンピュータ技術を必要とせず、情報のみを必要とします。誰でもファイルに2行を入れることができます。

これが実際に問題になる場合は、.ssh/authorized_keysホストBのファイルに特定のコマンドを追加できます。

command="ssh C" ssh-rsa <key_of_the_user_of_host_A>

したがって、ユーザーがこれを行うと、ssh BホストBで対話型シェルを起動するのではなく、ホストBのSSHサーバーが自動的に実行されますssh C(sshd(8)のマニュアルページを参照)。ただし、これによりホストBに直接ログインできなくなり、他のSSHコマンド(たとえば/bin/bash -lssh -t B /bin/bash -lは無視されます。マニュアルページによると、次のようになります。

クライアントが最初に提供したコマンドは、SSH_ORIGINAL_COMMAND環境変数にあります。

したがって、提供されたコマンドをホストCで実行したり、特定の条件でホストBで実行したりするなど、改善の余地がある可能性があります(この環境変数を考慮する場合は、引用するときも注意してください)。例は次のとおりです。

command="ssh ${TTY:+-t} C ${SSH_ORIGINAL_COMMAND-$SHELL}" ssh-rsa <key>

そうであれば、ホストCから提供されたコマンドを実行します(そうでなければ、対話型シェルは通常どおり開始されます)。これはscpうまくいくかもしれませんが、私のコンピュータでは「許可拒否」エラーが原因で失敗します。しかし、それはうまく機能し、問題がある場合はrsync代替品として使用できます。scp

重要。ホストBで(必須ではない)ポートを開くソリューションを選択しないでください。これらのポートへの接続は大学のファイアウォールによってブロックされ、機能しないか、ユーザーがポート22のSSHサーバーを介してホストBの認証をバイパスする可能性があるため、セキュリティ上の問題が発生します(追跡などの機能を使用)。

おすすめ記事