SSHゲートウェイ接続を介したSCP


8

私のネットワークレイアウトは次のようなものです。

これで、アリスは次のようにしてSSHゲートウェイ(これからはゲートウェイのみ)にアクセスできます。

ssh alice@external.ip

ゲートウェイの認証済みキーファイルは次のようになります

#/home/Alice/.ssh/authorized_keys
command="ssh -t alice@web" ssh-rsa ABCD...E== alice@somehost

したがって、アリスがプライベートキーでゲートウェイに接続しようとすると、実際にWebサーバーに接続されます(ゲートウェイPCはパスワードなしのプライベートキーでWebサーバーに接続できるため、透過性を維持できます)。

質問

  1. これを設定して、アリスがWebサーバーにscpできるようにするにはどうすればよいですか?

  2. これは別の接続を作成することを知っていますが、これが通常のsshとして機能して、次のようなものでも機能する方法はあります-R12345:localhost:22か?

回答:


10

別のsshサーバーの背後にあるsshサーバーにアクセスする場合は、単に「ProxyCommand」を使用します。例:.ssh / configに追加

Host Alice  
   User myLoginAtAlice # optional 
   ProxyCommand ssh -o Compression=no gateway netcat -w 90 %h %p
   ServerAliveInterval 30
   Compression yes

Host gateway
   HostName gateway.public.ip
   User myLoginAtTheGateway # optional 
   Compression yes

次に、ホスト名として「Alice」を使用して、直接「ssh Alice」、「rsync」、または「scp」を直接実行できます。魔法はクライアントには隠されています。

これにより、ネットワークトポロジ/構成が変更された場合にsshをすばやく再構成し、すべてのスクリプトを変更するのではなく、.ssh / configを変更するだけで済みます。

説明:sshは、直接TCP接続の代わりに、「プロキシコマンド」として指定されたコマンドをトランスポートとして使用します。Netcatは、(他の何百万もの機能の中で)stdin / stdoutを指定されたリモートホストに単純にリダイレクトするネットワークツールです。したがって、「ssh gateway nc sshserver 22」は、そのマシンのsshサーバーに接続します。%hはホスト名で、%pはポートです。このようなセットアップでは、「ポートN」を指定して、ProxyCommand行を変更せずにポートを変更できます。

暗号化または圧縮されたデータを圧縮してもデータ量はそれ以上減少しないため、最終的なコンピューターへの圧縮をアクティブにし、外部圧縮を無効にします。もちろん、圧縮設定をいじるのもオプションです。


もう1つの質問ですが、ゲートウェイマシンへのカスタムポートがある場合、rysncはそのように機能しません。それについての考え。
zidarsk8 2012年

.ssh / configの関連セクションに「Port port_number」を追加します。ssh_configとsshd_configのmanページを読んでください。それらはたくさんの情報であり、あなたに多くのインスピレーションをもたらすかもしれません。
ラウル・サリナス- Monteagudo

つまり、別のポートが指定されている場合、rsyncは機能しません。接続が正常に機能するようにポートを構成しましたが、rsyncが問題を引き起こしています。
zidarsk8 2012年

3

私はこれとまったく同じ問題を抱えていましたが、すべてを根本的に変更することなく機能しました。

私が行ったのは、$ SSH_ORIGINAL_COMMANDをゲートウェイのauthorized_keysに追加して、チェーンのすべてのものを通過して最終サーバーに渡すことだけでした。

したがって、この:

#/home/Alice/.ssh/authorized_keys
command="ssh -t alice@web" ssh-rsa ABCD...E== alice@somehost

になる:

#/home/Alice/.ssh/authorized_keys
command="ssh -q -t alice@web $SSH_ORIGINAL_COMMAND" ssh-rsa ABCD...E== alice@somehost

-qは、エンドポイントマシンからの接続クローズメッセージを抑制するために使用され、ローカルでリダイレクトを使用している場合にローカル出力に表示されないようにします。

その後、次のようにscpを使用できます。

scp localFileName alice@exernal.ip:/path/on/end/point/remoteFileName

これには、ユーザーがコマンドを介してエンドポイントサーバーにコマンドを渡し、ローカルセッションで結果を取得できるため、ファイルにリダイレクトしたり、別のプログラムにパイプしたりできるという利点もあります。

例えば:

ssh -t alice@external.ip "ls -l" > tmp

これは、sshdが環境変数$ SSH_ORIGINAL_COMMANDにsshクライアントによって指定されたコマンドを入力しているように見えるが、なぜこれが奇跡的にscpがコマンドと同様にエンドポイントマシンにパススルーできるのかわからないためです。


0

残念ながら、ポート転送では、を使用してファイルをアリスのワークステーションからWebサーバーに直接コピーすることはできませんscp。ではこのSOポスト(同じ認証メカニズムを利用してとscp)sshは接続ポート転送SSHを使用するために動作しませんなぜ私が説明しました。

オプションは、現在SSHゲートウェイとして機能しているマシンにVPNサーバーをセットアップし、それに接続して、ファイアウォールの背後にある任意のマシンに直接アクセスすることです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.