私はローカルコンピュータでリモートサーバーのトンネルを開くためにSSH経由でリモートでコマンドを実行しようとしています。私もsshpassを使用しています。
sshpass -fpw_file.txt ssh [email protected] 'bash /home/username/do_stuff.sh &'
このdo_stuff.shには1行しか含まれていません。
ssh -f -N -L 8888:hostname:9999 user@host &
ただし、呼び出し(最初のコマンド)は返されません。単一引用符の外に&を入れると、終了しないプロセスが生成されます。これは非常に小さなメモリリークですが、これをきちんと実行する方法があるかどうかを知っておくとよいでしょう。
ありがとうございます!
答え1
I/O ストリームを null にリダイレクトします。ディスクリプタが開いているBGプロセスによってSSHが閉じられないことがある。
sshpass -fpw_file.txt ssh [email protected] 'bash /home/username/do_stuff.sh &> /dev/null < /dev/null &'
説明する
&> /dev/null
stdoutとstderrを取得してnullにリダイレクトする
< /dev/null
stdinを取得してnullにリダイレクト
&
最後に、プロセスはバックグラウンドで送信されます。