내 스크립트의 명령은 다음과 같습니다.
ssh -i $KEY $USER@$HOST "sudo su tom; echo $DATA >> /home/user/file.txt
이러한 명령은 개별적으로는 훌륭하게 작동하지만 스크립트에서 함께 사용하면 중단됩니다.
이 명령을 단독으로 실행하면 sudo su tom; cat /home/user/file.txt
사용자 tom을 로그아웃할 때만 cat이 실행됩니다.
bash 스크립트에서 사용자를 변경하고 명령을 실행하는 방법은 무엇입니까?
답변1
Paul Calabro가 제안한 것(내 생각에는 이것이 주요 문제는 아닌 것 같습니다) 외에도 원격 컴퓨터에서 명령을 실행하는 데 사용되는 명령줄 해석기(셸)도 정의해야 합니다. 로컬 컴퓨터와 다른 셸이 있을 수 있기 때문입니다. 주인.
-t
명령 의 매개변수 도 필요하다고 생각합니다 ssh
.
-t는 의사 tty 할당을 강제합니다. 이는 원격 컴퓨터에서 임의의 화면 기반 프로그램을 실행하는 데 사용할 수 있으며, 이는 예를 들어 메뉴 서비스를 구현할 때 유용합니다. 여러 -t 옵션은 ssh에 로컬 tty가 없더라도 tty 할당을 강제합니다.
다음은 귀하가 찾고 있는 것에 더 가깝습니다.
ssh -it $KEY $USER@$HOST 'sudo su tom; echo $DATA >> /home/user/file.txt; bash'
불행히도 위의 솔루션에서는 sudo su
&&의 "concat"이 echo
여전히 작동하지 않지만 명령 -c
인수를 사용하면 su
문제가 해결됩니다.
-c, --command=COMMAND 단일 COMMAND를 쉘에 전달하려면 -c를 사용하십시오.
답변2
지정한 명령은 다음과 같습니다.
ssh -i $KEY $USER@$HOST "sudo su tom; echo $DATA >> /home/user/file.txt
이에 대한 몇 가지 작은 참고 사항:
- 이 명령은 공백 이 포함
$KEY
된 경우 예기치 않은 동작을 생성합니다 . (너무 불가능하지는 않습니다.)$USER
$HOST
$DATA
ssh
원격으로 로그인하는 호스트가 아니라 명령을 실행하는 호스트를 확장합니다 . (나는 이것이 당신의 의도라고 가정합니다.)"
명령 끝에 닫는 문이 없습니다. 복사-붙여넣기 오류인 것 같아요.
이제 이 명령의 요점과 문제를 해결하는 명령에 대해 설명합니다.
sudo
.root
그것은 맨 페이지를 인용하는 데 사용됩니다.
sudo, sudoedit - execute a command as another user
그래서,원하는 간단한 명령예:
ssh -i $KEY $USER@$HOST "sudo -u tom echo $DATA >> /home/user/file.txt"
이는 $USER
쓰기 권한을 가정합니다 /home/user/file.txt
. tom
이러한 권한을 가진 사람 만 있는 경우 다음을 사용하세요.
ssh -i $KEY $USER@$HOST "sudo -u tom -i 'echo $DATA >> /home/user/file.txt'"
자세한 내용은 을 읽어보세요 man sudo
.
답변3
사용자를 전환할 수 없습니다. 루트로 실행하는 것이 트릭을 수행하는 것 같습니다.
ssh -i $KEY $USER@$HOST "echo "$DATA" |sudo tee $DIRECTORY"