シェルスクリプトの一部としてバックグラウンドでトンネルを実行する方法

abbood

私はこれらの2つのコマンドを常に実行して、ファイアウォールの背後で保護されているaws上のrdsインスタンスに接続します(したがって、ec2インスタンスをトンネリングします)。

コマンド1:トンネルを開く(バックグラウンドで実行)

ssh -N -L port:host:5432 user@$ip -i ~/.ssh/key.pub &

コマンド2:トンネルポートを介してdbに接続します。

PGPASSWORD=password psql dbname -U user -h ip_address -p port;

これは素晴らしいことですが、両方を1つの関数にまとめたいと思います。しかし、私には何もうまくいきませんでした:

試行1:バックグラウンドのものなしで実行する:

function db()
{
    ssh -N -L port:host:5432 user@$ip -i ~/.ssh/key.pub &
    PGPASSWORD=password psql dbname -U user -h ip_address -p port;
}

単に私にこれを教えてください:

$proddb
[1] 62924
psql: could not connect to server: Connection refused
    Is the server running on host "127.0.0.1" and accepting
    TCP/IP connections on port 6666?

最初のコマンドはバックグラウンドで実行されていますが、次のようになります。

ps aux | grep host
(standard input):435:abdullah         62924   0.0  0.0  4315660   5828 s006  S     3:06PM   0:00.03 ssh -N -L port:host:5432 user@$ip -i ~/.ssh/key.pub

そして、その直後に次のコマンドを実行すると、データベースに正常に接続できます。

PGPASSWORD=password psql dbname -U user -h ip_address -p port;
user=>

どうすればこれを機能させることができますか?

AB

最初のコマンドは、2番目のコマンドが実行されたときにトンネルを確立する時間がなかったため、「接続が拒否されました」というメッセージが表示されました。

使用せず&、代わりにオプションを使用してください-f

-f
コマンド実行の直前にバックグラウンドに移動するようにsshに要求します。これは、sshがパスワードまたはパスフレーズを要求するが、ユーザーがバックグラウンドでそれを望んでいる場合に役立ちます。これは-nを意味します。リモートサイトでX11プログラムを起動するための推奨される方法は、ssh -f hostxtermのようなものを使用することです。
ExitOnForwardFailure構成オプションが「yes」に設定されている場合、-fで開始されたクライアントは、すべてのリモートポート転送が正常に確立されるのを待ってから、バックグラウンドに配置されます。

これらすべてをまとめて、関数のssh行を次のように置き換えます。

ssh -o ExitOnForwardFailure=yes -f -N -L port:host:5432 user@$ip -i ~/.ssh/key.pub

そうすれば、関数を複数回実行しても、(複数-1)無駄なsshが実行されたままになることはありません。

-N短いリモートスリープコマンドに置き換えることもできます。そうすれば、強制終了する必要がある場合に検索する必要のある、長期間有効なアイドル状態のsshコマンドがなくなります。Sshは、トンネルの使用が終了するまで待機してから終了するため、短い遅延は問題になりません。

ssh -o ExitOnForwardFailure=yes -f -L port:host:5432 user@$ip -i ~/.ssh/key.pub sleep 15

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

bashシェルスクリプトの一部としてDockerコンテナでコマンドを実行する方法

分類Dev

バックグラウンドでシェルスクリプトを実行する方法は?

分類Dev

バックグラウンドでシェルスクリプトを実行する

分類Dev

「バックグラウンド」でスクリプトの一部(単一の関数)を実行するにはどうすればよいですか?

分類Dev

一部のLinuxシェルスクリプトがexecを使用してコマンドを実行するのはなぜですか?

分類Dev

バックグラウンドでコマンドを実行すると、シェルスクリプトでファイルに書き込めません

分類Dev

バックグラウンドでコマンドを実行すると、シェルスクリプトでファイルに書き込めません

分類Dev

引数を受け入れてバックグラウンドで実行するbashシェルスクリプトを実行する

分類Dev

トランザクションの一部としてmsaccessvbaで追加クエリを実行する方法

分類Dev

シェル スクリプトでバックグラウンド ジョブの数を制御する方法

分類Dev

バックグラウンドでシェルスクリプトを実行して出力を取得しない方法

分類Dev

モジュールの一部としてasyncioを使用してバックグラウンドプロセスを設定する方法

分類Dev

シェルスクリプト内でバックグラウンドで実行するとQEMUが起動しない

分類Dev

バックグラウンドで実行されているシェルスクリプトを強制終了する

分類Dev

バックグラウンドで実行されているbashシェルスクリプトを終了する

分類Dev

シェルスクリプトをJavaプロジェクトの一部として追加する方法

分類Dev

RaspberryPiのバックグラウンドで実行されるPythonスクリプトを使用してテキストファイルを作成する

分類Dev

毎日特定の時間にUnixのバックグラウンドでシェルスクリプトを実行する

分類Dev

AzureDevopsのプルリクエストブランチポリシーの一部としてシーケンシャルビルドパイプラインを実行する

分類Dev

起動時およびRaspberryPiのバックグラウンドで無限のwhileループを使用してbashスクリプトを実行する

分類Dev

Bashで複数のコマンドを実行する方法(一部はバックグラウンドで)

分類Dev

別のスクリプトによって呼び出されてバックグラウンドで実行される無限ループを呼び出すシェルスクリプト(.sh)

分類Dev

自動スケーリンググループの一部であるすべてのAmazonec2インスタンスでシェルスクリプトを実行するにはどうすればよいですか?

分類Dev

dockerはコンテナーを終了せずにバックグラウンドでシェルスクリプトを実行します

分類Dev

PythonスクリプトをWindowsバックグラウンドプロセスとして実行する

分類Dev

バックグラウンドプロセスとして実行されているPythonスクリプトをファイルに出力する

分類Dev

デフォルトでバックグラウンドでbashスクリプトを実行する

分類Dev

バックグラウンドでPythonスクリプトを実行した後、インタラクティブなPythonシェルを開く

分類Dev

シェル環境で非特権ユーザーとしてスクリプトの一部を実行する

Related 関連記事

  1. 1

    bashシェルスクリプトの一部としてDockerコンテナでコマンドを実行する方法

  2. 2

    バックグラウンドでシェルスクリプトを実行する方法は?

  3. 3

    バックグラウンドでシェルスクリプトを実行する

  4. 4

    「バックグラウンド」でスクリプトの一部(単一の関数)を実行するにはどうすればよいですか?

  5. 5

    一部のLinuxシェルスクリプトがexecを使用してコマンドを実行するのはなぜですか?

  6. 6

    バックグラウンドでコマンドを実行すると、シェルスクリプトでファイルに書き込めません

  7. 7

    バックグラウンドでコマンドを実行すると、シェルスクリプトでファイルに書き込めません

  8. 8

    引数を受け入れてバックグラウンドで実行するbashシェルスクリプトを実行する

  9. 9

    トランザクションの一部としてmsaccessvbaで追加クエリを実行する方法

  10. 10

    シェル スクリプトでバックグラウンド ジョブの数を制御する方法

  11. 11

    バックグラウンドでシェルスクリプトを実行して出力を取得しない方法

  12. 12

    モジュールの一部としてasyncioを使用してバックグラウンドプロセスを設定する方法

  13. 13

    シェルスクリプト内でバックグラウンドで実行するとQEMUが起動しない

  14. 14

    バックグラウンドで実行されているシェルスクリプトを強制終了する

  15. 15

    バックグラウンドで実行されているbashシェルスクリプトを終了する

  16. 16

    シェルスクリプトをJavaプロジェクトの一部として追加する方法

  17. 17

    RaspberryPiのバックグラウンドで実行されるPythonスクリプトを使用してテキストファイルを作成する

  18. 18

    毎日特定の時間にUnixのバックグラウンドでシェルスクリプトを実行する

  19. 19

    AzureDevopsのプルリクエストブランチポリシーの一部としてシーケンシャルビルドパイプラインを実行する

  20. 20

    起動時およびRaspberryPiのバックグラウンドで無限のwhileループを使用してbashスクリプトを実行する

  21. 21

    Bashで複数のコマンドを実行する方法(一部はバックグラウンドで)

  22. 22

    別のスクリプトによって呼び出されてバックグラウンドで実行される無限ループを呼び出すシェルスクリプト(.sh)

  23. 23

    自動スケーリンググループの一部であるすべてのAmazonec2インスタンスでシェルスクリプトを実行するにはどうすればよいですか?

  24. 24

    dockerはコンテナーを終了せずにバックグラウンドでシェルスクリプトを実行します

  25. 25

    PythonスクリプトをWindowsバックグラウンドプロセスとして実行する

  26. 26

    バックグラウンドプロセスとして実行されているPythonスクリプトをファイルに出力する

  27. 27

    デフォルトでバックグラウンドでbashスクリプトを実行する

  28. 28

    バックグラウンドでPythonスクリプトを実行した後、インタラクティブなPythonシェルを開く

  29. 29

    シェル環境で非特権ユーザーとしてスクリプトの一部を実行する

ホットタグ

アーカイブ