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