私の問題は説明した問題と似ています。ここ。ホスト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/config
Aでは、ユーザーは特定のコンピュータ技術を必要とせず、情報のみを必要とします。誰でもファイルに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 -l
)ssh -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の認証をバイパスする可能性があるため、セキュリティ上の問題が発生します(追跡などの機能を使用)。