ssh 사용자 변경 및 명령 실행

ssh 사용자 변경 및 명령 실행

내 스크립트의 명령은 다음과 같습니다.

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
  • $DATAssh원격으로 로그인하는 호스트가 아니라 명령을 실행하는 호스트를 확장합니다 . (나는 이것이 당신의 의도라고 가정합니다.)
  • "명령 끝에 닫는 문이 없습니다. 복사-붙여넣기 오류인 것 같아요.

이제 이 명령의 요점과 문제를 해결하는 명령에 대해 설명합니다.

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"

관련 정보