私は現在、次のものを実行しています:
Sudo ssh -L PORT:IP:PORT root@IP
ここで、IPは保護されたマシンのターゲットであり、PORTは転送するポートを表します。
これは、この転送なしではアクセスできない多くのアプリケーションを使用しているためです。これを実行した後、localhost:PORT
からアクセスできます。
主な問題は、これらのポートのうち4つを実際に転送する必要があるために発生しました。
私の解決策は、4つのシェルを開き、常に履歴を逆方向に検索して、どのポートを転送する必要があるかなどを正確に探してから、このコマンドを実行します-各シェルに1つ(パスワードを入力する必要があります).
次のようなことができる場合にのみ:
Sudo ssh -L PORT1+PORT2+PORT+3:IP:PORT+PORT2+PORT3 root@IP
それはすでに本当に役立つでしょう。
これを簡単にする方法はありますか?
同じコマンドで-L
オプションを再度使用します。毎回異なるポートで。
正確に NaN と答えた場合、複数の-L引数を指定します。私はいつもこれをしています。マルチポート転送の例を次に示します。
ssh remote-Host -L 8822:REMOTE_IP_1:22 -L 9922:REMOTE_IP_2:22
注:localhost
を指定しない場合、これは-L localhost:8822:REMOTE_IP_1:22
と同じです。
これで、次のことができます(別の端末から):
ssh localhost -p 8822
ポートREMOTE_IP_1
で22
に接続するには
同様に
ssh localhost -p 9922
ポートREMOTE_IP_2
で22
に接続するには
もちろん、これをスクリプトにラップしたり、特定の特定のホスト/ポートに転送する多くの異なるホスト/ポートがある場合に自動化することを妨げるものは何もありません。
お役に立てれば。
次のbash関数を使用できます(~/.bashrc
に追加するだけです):
function pfwd {
for i in ${@:2}
do
echo Forwarding port $i
ssh -N -L $i:localhost:$i $1 &
done
}
使用例:
pfwd hostname {6000..6009}
jbchichokoとyuvalは実行可能なソリューションを提供しています。ただし、jbchichokoの答えは関数としての柔軟な答えではなく、yuvalの答えによって開かれたトンネルはバックグラウンドで実行されるため、ctrl+c
によってシャットダウンできません。私は2つの欠陥を解決する解決策を以下に示します:
~/.bashrc
または~/.zshrc
での関数の定義:
# fsshmap multiple ports
function fsshmap() {
echo -n "-L 1$1:127.0.0.1:$1 " > $HOME/sh/sshports.txt
for ((i=($1+1);i<$2;i++))
do
echo -n "-L 1$i:127.0.0.1:$i " >> $HOME/sh/sshports.txt
done
line=$(head -n 1 $HOME/sh/sshports.txt)
cline="ssh "$3" "$line
echo $cline
eval $cline
}
関数の実行例:
fsshmap 6000 6010 hostname
この例の結果:
127.0.0.1:16000~16009
と同じhostname:6000~6009
にアクセスできます
)同じHostを介して複数のポートを転送するユーザーの場合、〜/ .ssh/config
Host all-port-forwards Hostname 10.122.0.3 User username LocalForward PORT_1 IP:PORT_1 LocalForward PORT_2 IP:PORT_2 LocalForward PORT_3 IP:PORT_3 LocalForward PORT_4 IP:PORT_4
そして、それは簡単なssh all-port-forwards
になります。
ポート転送を使用してサーバーにログインする利点の1つは、Jupyterノートブックの使用を促進することです。この link は、その方法に関する優れた説明を提供します。ここで、皆さん全員が参照できるように、要約と拡張を行いたいと思います。
状況1. Host-Aという名前のローカルマシン(たとえば、自分のラップトップ)からHost-Bという名前のリモート作業マシンにログインします。
ssh user@Host-B -L port_A:localhost:port_B
jupyter notebook --NotebookApp.token='' --no-browser --port=port_B
次に、ブラウザを開いて次のように入力します。 http:// localhost:port_A / Host-Bで作業を行いますが、Host-Aで確認できます。
状況2. Host-Aという名前のローカルマシン(たとえば、自分のラップトップ)からHost-Bという名前のリモートログインマシンにログインし、そこからHost-Cという名前のリモート作業マシンにログインします。これは通常、大学内のほとんどの分析サーバーに当てはまり、ssh -L
で接続された2つの-t
を使用して実現できます。
ssh -L port_A:localhost:port_B user@Host-B -t ssh -L port_B:localhost:port_C user@Host-C
jupyter notebook --NotebookApp.token='' --no-browser --port=port_C
次に、ブラウザを開いて次のように入力します。 http:// localhost:port_A / Host-Cで作業を行いますが、Host-Aで確認できます。
状況3. Host-Aという名前のローカルマシン(たとえば、自分のラップトップ)からHost-Bという名前のリモートログインマシンにログインし、そこからHost-Cという名前のリモート作業マシンにログインし、最後にリモート作業マシンHost- D.これは通常そうではありませんが、いつか起こるかもしれません。これは状況2の拡張であり、同じロジックをより多くのマシンに適用できます。
ssh -L port_A:localhost:port_B user@Host-B -t ssh -L port_B:localhost:port_C user@Host-C -t ssh -L port_C:localhost:port_D user@Host-D
jupyter notebook --NotebookApp.token='' --no-browser --port=port_D
次に、ブラウザーを開いて、次のように入力します。 http:// localhost:port_A / Host-Dで作業を行いますが、Host-Aで確認できます。
Port_A、port_B、port_C、port_Dは、リストされている一般的なポート番号を除いて、乱数にすることができます here 。状況1では、port_Aとport_Bを同じにして、手順を簡素化できます。
ポート転送を使用してサーバーにログインする利点の1つは、Jupyterノートブックの使用を促進することです。この link は、その方法に関する優れた説明を提供します。ここで、皆さん全員が参照できるように、要約と拡張を行いたいと思います。
状況1. Host-Aという名前のローカルマシン(たとえば、自分のラップトップ)からHost-Bという名前のリモート作業マシンにログインします。
ssh user@Host-B -L port_A:localhost:port_B
jupyter notebook --NotebookApp.token='' --no-browser --port=port_B
次に、ブラウザを開いて次のように入力します。 http:// localhost:port_A / Host-Bで作業を行いますが、Host-Aで確認できます。
状況2. Host-Aという名前のローカルマシン(たとえば、自分のラップトップ)からHost-Bという名前のリモートログインマシンにログインし、そこからHost-Cという名前のリモート作業マシンにログインします。これは通常、大学内のほとんどの分析サーバーに当てはまり、ssh -L
で接続された2つの-t
を使用して実現できます。
ssh -L port_A:localhost:port_B user@Host-B -t ssh -L port_B:localhost:port_C user@Host-C
jupyter notebook --NotebookApp.token='' --no-browser --port=port_C
次に、ブラウザを開いて次のように入力します。 http:// localhost:port_A / Host-Cで作業を行いますが、Host-Aで確認できます。
状況3. Host-Aという名前のローカルマシン(たとえば、自分のラップトップ)からHost-Bという名前のリモートログインマシンにログインし、そこからHost-Cという名前のリモート作業マシンにログインし、最後にリモート作業マシンHost- D.これは通常そうではありませんが、いつか起こるかもしれません。これは状況2の拡張であり、同じロジックをより多くのマシンに適用できます。
ssh -L port_A:localhost:port_B user@Host-B -t ssh -L port_B:localhost:port_C user@Host-C -t ssh -L port_C:localhost:port_D user@Host-D
jupyter notebook --NotebookApp.token='' --no-browser --port=port_D
次に、ブラウザーを開いて、次のように入力します。 http:// localhost:port_A / Host-Dで作業を行いますが、Host-Aで確認できます。
Port_A、port_B、port_C、port_Dは、リストされている一般的なポート番号を除いて、乱数にすることができます here 。状況1では、port_Aとport_Bを同じにして、手順を簡素化できます。
私は loco を開発しました。これはssh転送を支援するためのものです。同じポートでリモートでローカルにポート5000と7000を共有するために使用できます。
pip install loco
loco listen SSHINFO -r 5000 -r 7000