백그라운드에서 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

다음 두 명령이 작동하지 않습니다

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"'

관련 정보