SSHトンネリングは私にとって非常に混乱します。私はLinuxでこれができるかどうか疑問に思います。
私は3台のマシンを持っています。
A. My local machine at home.
B. Machine at work that I can SSH into (middle man).
C. My desktop at work that I can only SSH into from machine B.
それで私はA - > BからそしてB - > CからSSH接続できますが、A - > Cからはできません。
AからBへのSSHトンネルを設定する方法はありますか。それで、他のSSHコマンドを実行すると、それは自分のローカルマシンAからしか機能しません。私は基本的に仕事から自宅にgitリポジトリを複製しようとしています(そして私はgitをマシンBにインストールすることはできません)。
また、一度設定します..どのようにそれを設定解除するでしょうか?
これをhostAの.ssh/config
ファイルに入れます(詳細については man 5 ssh_config を参照してください)。
# .ssh/config on hostA:
Host hostC
ProxyCommand ssh hostB -W %h:%p
次のコマンドは自動的にhostBを通過します。
hostA:~$ ssh hostC
ssh
の内側にssh
をラップするのは計算上コストがかかり、すでに暗号化されたトラフィックをトンネリングするときに余分な労力とラッパーを使用する必要がないため、-oCiphers=arcfour
や-oClearAllForwardings=yes
のようなオプションを追加して作業をスピードアップできます。
5.3より前のOpenSSHを使用している場合は、-W
オプションは使用できません。この場合、netcat(nc
)を使って上記を実装することができます。
ProxyCommand ssh hostB nc %h %p # or netcat or whatever you have on hostB
編集:これは間違った方法です。代わりに ephemientの答え を見てください。この答えは機能しますが、潜在的に安全性が低く、間違いなくそれほど素晴らしいものではありません。
次のような解決策が必要なようです。
ssh -L localhost:22:machinec:22 machineb
これでmachineb
のシェルになります。これは一人にしておきます。端末ウィンドウを最小化します。
さて、あなたがlocalhost
にssh接続するときはいつでも、あなたは実際にmachinec
を通してmachineb
に接続されるでしょう。トンネルを使い終わったら、上記のコマンドを実行した端末を閉じてください。
コマンドを実行するにはスーパーユーザー権限が必要です。
あなたはAでシェルエイリアスが欲しいように聞こえます。
対話型シェルの場合、この単純なコマンドを使用できます。
ssh -J <user>@<hostB> <user>@<hostC>
-Jオプションはjump用です。
ssh -f -L 2222:HostC_IP_or_Name:22 userOnB@hostB sleep 10 &&
ssh -o HostKeyAlias=HostC -p 2222 userOnC@localhost
-f
パラメータは、接続が確立されるとSSHにバックグラウンドに移行するように指示しますsleep 10
が必要です。次に最初のsshが2番目のsshが転送されたポートを離れるときに閉じます。これで後続のSSHセッションを実行できます。
ssh -o HostKeyAlias=HostC -p 2222 userOnC@localhost
ssh -f -L 2222:HostC_IP_or_Name:22 userOnB@hostB sleep 10 &&
ssh -M -S ~/.ssh/ssh_HostC22userOnC.sock -o HostKeyAlias=HostC -p 2222 userOnC@localhost
次のsshセッションは、実行することで開くことができます。
ssh -S ~/.ssh/ssh_HostC22userOnC.sock userOnC@localhost
-Mおよび-Sパラメータを使用する主な利点は、HostAからHostCへの接続が1つだけ開かれていることです。その後のセッションでは、認証が行われず、実行速度が大幅に向上します。
あなたの雇用主がVPNを提供している場合は、代わりにそれを使用することをお勧めします。
そうすれば、アプリケーションを特別に(sshでさえも)設定する必要がなくなり、ファイアウォールの内側にあるマシンを見ることができます。さらに、すべてのトラフィックはVPNソフトウェアによって暗号化されるため、不注意または意図的に暗号化されていないトラフィックにセキュリティが追加されます。
特殊な場合、混合nixプラットフォーム
hostA(linux) - > HostB(solaris) - > HostC(linux)
HostC上にXアプリケーションが必要で、中間ホップがSolarisボックス上にある場合...この場合、ProxyCommandに必要なnetcat(nc)が次のように見つかります。
hostA:〜$ vi .ssh/config:
ホストhostC ProxyCommand ssh hostB nc%h%p#ここで、ncはnetcat です。
その後、自動トンネリングが機能します。
hostA:〜$ sshのhostC