サービスを起動し、sshまたはautosshを使用してスクリプトを実行/ロードし、バックグラウンドでリモートポート転送「-f」を使用してスクリプトからmore / nextコマンドを実行します。

サービスを起動し、sshまたはautosshを使用してスクリプトを実行/ロードし、バックグラウンドでリモートポート転送「-f」を使用してスクリプトからmore / nextコマンドを実行します。

私の設定:

debian 10.9

4.19.0-19-amd64

OpenSSH_7.9p1 Debian-10+deb10u2, OpenSSL 1.1.1d 10 Sep 2019

autossh 1.4g

GNU bash, 5.0.3(1)-release (x86_64-pc-linux-gnu)

サービスを開始します。/etc/systemd/system/myshh.service

ExecStart=/home/user/ssh_run私のスクリプトを始めるssh_run

これは私が試したSSHとAUTOSSHの多くの例の2つです。

ssh_runスクリプト

#!/bin/bash

ssh -f -NT -o "ServerAliveInteval=30" -o "ServerAliveCountMax=2" \
-R 5555:localhost:443 -l [USER] [IP] -p [PORT] -i [KEY-WITHOUT-PASSWORD]

EXECUTE NEXT COMMAND

または

#!/bin/bash

/usr/bin/autossh -f -NT -o "ExitOnForwardFailure=yes" \
-R 5555:localhost:443 -l [USER] [IP] -p [PORT] -i [KEY-WITHOUT-PASSWORD]

EXECUTE NEXT COMMAND
  1. シェルから個別にコマンドを実行すると動作します。ssh -f -NT ......

  2. スクリプトを実行すると機能します。./ssh_run

  3. サービスを開始したが機能しない/etc/systemd/system/myshh.serviceとき-f

3つのコマンドはすべて次のコマンドを実行しません。

質問:

/etc/systemd/system/myshh.serviceスクリプト./ssh_runとバックグラウンドを使用してサービスを開始すると、-f次のコマンドが実行されますが、サービスはステータスコード0で終了しますが、sshまたはautosshはps aux | grep [s]shありません。ps aux | grep [a]utossh

systemctl status myshh.servicegrep私もエラーがないことを確認しました。journalctl

Restart=30サービスが停止または再起動されましたが、同じ結果が発生しました。サービスの有無にかかわらず試しました。Restart=alwaysEnvironment="AUTOSSH_GATETIME=0"

すべてのスタックサイトの投稿のほとんどを読み、検索エンジンを試してみましたが、解決策が見つかりませんでした。試してみましたが(command)....結果はありません....execbash -c

今私の質問/質問:

次のコマンドを実行するためにバックグラウンド(つまりサービスで起動された)bashスクリプトでssh / autosshリモートポートフォワーディングコマンドを実行するにはどうすればよいですか?

答え1

誰もが同じ問題を抱えている場合は、この投稿で今すぐ私の一日を節約できます。

私のsystemctlサービスが開始されない理由を見つける方法

Type=forking私のサービスファイルに追加されました/etc/systemd/system/myshh.service

-fこれで、バックグラウンド実行オプションを使用してbashスクリプトからssh / autosshリモートポート転送コマンドを実行できるようになりました。つまり、サービスから起動してスクリプトから次の/追加コマンドを実行できます。

関連情報を含む投稿への追加リンク:

systemctl statusサービスでログ全体を表示するには?

nohup、disown、&の違い

スクリプトでバックグラウンドプロセスを開始し、スクリプトが終了したら管理します。

関連情報