スクリプトでSSH接続を使用する場合のSSHポート転送

スクリプトでSSH接続を使用する場合のSSHポート転送

SSH経由でデバイスに接続するときは、まず次の方法でSSHメニューに移動する方法を知っています[ENTER} ~C-L 4455:ip:80

これにより、ローカルシステムのlocalhost:4455がリモートデバイスのポート80に移動します。

この手動アクションをスクリプトにどのように配置できますか?ここで唯一の変数はリモートデバイスのIPアドレスですが、自動的にインポートする方法はわかっていますが、sshメニューにコマンドをプッシュする方法はわかりません-L 4455:ip:80

ベストアンサー1

紹介する

最近、次の記事に触れました。https://hackertarget.com/ssh-examples-tunnels/SSH接続とポート転送についてたくさん説明していますので、ぜひご覧ください。たくさん学ぶことができるでしょう:)

あなたに関連する内容は次のとおりです。


SSHトンネリング(ポート転送)

最も単純なSSHトンネルは、トンネルの反対側の端にある別のポートに接続されているローカルシステムのポートを開きます。

localhost:~$ ssh -L 9999:127.0.0.1:80 user@remoteserver

-Lパラメータを分析してみましょう。 -L をローカルリスナーとして処理します。したがって、上記の例では、ポート9999はlocalhostでリッスンしており、そのポートはリモートサーバーのポート80に転送されます。 127.0.0.1は、リモートサーバーのlocalhostを表します。

さらに一歩進みましょう。次の例では、ローカルネットワーク上の他のホストでリッスンしているポートに接続できます。

localhost:~$ ssh -L 0.0.0.0:9999:127.0.0.1:80 user@remoteserver

この例では、私たちが接続しているポートはリッスンしているWebサーバーです。プロキシサーバーまたは他のTCPサービスにすることもできます。


はい

上記は現在アクティブなSSHシェルを開きます。ポートだけを転送しようとしているので、これは必要ありません。コマンドに-Nパラメータを追加して、リモートコマンドの実行をスキップできます(パブリックシェルもコマンドです)。このssh manページではこれについても説明します。

-N Do not execute a remote command. This is useful for just forwarding ports.

したがって、次のスクリプトはctrl-c / killを押すまでポートを開きます。

#!/usr/bin/env sh

echo "Forwarding ports"
ssh -N -L 0.0.0.0:9999:127.0.0.1:80 user@remoteserver

sleepコマンドを実行して-Nパラメータを削除して、数秒間ポートを開くこともできます。

ssh -L 0.0.0.0:9999:127.0.0.1:80 user@remoteserver "sleep 10"

決定的な

これらのSSHトンネルには欠点があります。転送されたポートを長時間開いたままにするには、次のスレッド、特に次のセクションを確認することをお勧めしますautosshhttps://superuser.com/questions/37738/how-to-reliously-keep-an-ssh-tunnel-open

おすすめ記事