バックグラウンドでSSHを実行する方法 -t user@remote 'sudo nohup bash -c "command"'

バックグラウンドでSSHを実行する方法 -t user@remote 'sudo nohup bash -c "command"'

sudo特権のあるリモートホストでスクリプトを実行したいのですが、誰かが次のコマンドを使用するnohup必要があると提案しました。ssh -t

スクリプトはls; sleep 10; echo finish私が望むものと同様にここで書かれています。

ssh -t esolve@remote_host \
'sudo nohup bash -c "ls;sleep 100;echo finish" < /dev/null 2>&1 >> ssh.log' 

このコマンドの後のスクリプトには次のような他のコマンドがあるので、このスクリプトを localhost のバックグラウンドで実行したいと思います。

my script.sh:

ssh -t esolve@remote_host \
'sudo nohup bash -c "ls;sleep 100;echo finish" < /dev/null 2>&1 >> ssh.log' 
... some other commands

次の2つのコマンドは機能しません

ssh -t esolve@remote_host \
'sudo nohup bash -c "ls;sleep 100;echo finish" < /dev/null 2>&1 >> ssh.log' &

ssh -t esolve@remote_host \
'sudo nohup bash -c "ls;sleep 100;echo finish" < /dev/null 2>&1 >> ssh.log &' 

なぜ?

このコマンドをlocalhostのバックグラウンドで実行するにはどうすればよいですか?また、sudoリモートホストにパスワードを入力する必要はありません。

答え1

-b必要に応じてパスワードの入力を求めるフラグを追加し、sudoバックグラウンドに移動します。 (リダイレクトはbashでも実行する必要があります)(すべてにリダイレクトを適用するには中括弧が必要です)

ssh -t esolve@remote_host 'sudo -b nohup bash -c "{ ls;sleep 100;echo finish; } < /dev/null 2>&1 >> ssh.log"'

画面を試してみることもできます。

ssh -t esolve@remote_host 'sudo -b screen -m -d bash -c "{ ls;sleep 100;echo finish; } < /dev/null 2>&1 >> ssh.log"'

関連情報