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