web-dev-qa-db-ja.com

セッションなしのSSHポートフォワーディング

ミニhttpサーバーのライブカメラストリームポートであるポート8085をリモートサーバーに転送しようとしています。

私が使用している私のコマンドはそうです:

ssh -R $rport:dc-bb7925e7:$camport -p 25 [email protected]

このコマンドは現在実行されているため、ポートを転送し、localhost:8085に移動すると、リモートサーバーでライブストリームを確認できますが、問題は、クライアントでTTYセッションが開いているため、それ以降のすべてのスクリプトが妨げられることです。実行から。

だから私はバックグラウンドでsshを使ってみました:

ssh -Nf -R $rport:dc-bb7925e7:$camport -p 25 [email protected]

これは、接続が閉じているように見えるため、機能しません。ポート転送は、スクリプトがif/then/else条件を評価し、実行して転送するスクリプトで使用されています。このポートを転送しても、他のすべてのスクリプトが停止することは想定されていません。ポートを開いたまま、ポートを転送してから先に進む必要があります。

私は何を間違っているのですか、または使用できる他のフラグはありますか?

9
RootWannaBe

アクティブなTTYのバックグラウンドを作成するのではなく、SSHに処理を任せることができます。

私の提案はこれです:

ssh -fNT -R $rport:dc-bb7925e7:$camport -p 25 [email protected]

最初の3つのオプションは次のとおりです。

  -f    Requests ssh to go to background just before command execution.
  -N    Do not execute a remote command.
  -T    Disable pseudo-tty allocation.

-fオプションは実際に物事を背景にするものですが、-N-Tは、トンネルを運ぶことを唯一の目的とするSSHセッションに割り当てる必要のないリソースを節約します。 。

また、スクリプトではなく静的構成ファイルに静的構成を追加する方が望ましいと思われる場合に備えて、これらのオプションの一部を~/.ssh/configファイルのカスタムプロファイルに追加できることにも注意してください。 RemoteForward config fileオプションは、-Rコマンドラインオプションと同等です。

参照:

23
ghoti

-Nはバックグラウンドではなく、リモートコマンドではありません。あなたは次のようなものが欲しいです:

ssh -R $rport:dc-bb7925e7:$camport -p 25 [email protected]&

コマンドのバックグラウンドとなる末尾のアンパサンドに注意してください。

完了したら、SSHセッションに戻って閉じるためのロジックを作成することをお勧めします。

1
ernie

これはMacでも機能します

ssh -o ControlPersist=yes -fNT -L 3306:127.0.0.1:3306 example.com

&を使用でき、バックグラウンドでフリーズすることはありませんが、ログイン後に自動的にバックグラウンドになるため、&を使用しないでください。

-fはログイン後にバックグラウンドに置きます-Nはリモートユーザーシェルの自動実行を無効にします-Tはローカルpsudo-ttyを無効にします

-o ControlPersist = yesは、ControlMaster = autoと組み合わせると、接続が閉じられないようにします。これは、一部のユーザーの/ install/distros〜/.ssh/configにあります。

これは、複数のSSH接続を連鎖させて、1つのライナーまたはbashスクリプトで転送する方法です。

1
Ray Foss