파일 파이프를 사용한 루트가 아닌 SSH 권한 있는 명령

파일 파이프를 사용한 루트가 아닌 SSH 권한 있는 명령

루트 로그인이 비활성화된 SSH 서버가 있습니다. 실행 후 파일에서 입력이 필요한 권한 있는 명령을 실행하고 싶습니다. 사용자 개입 없이 oneliner 명령이나 스크립트를 통해 모든 작업을 수행하고 싶습니다.

키 인증 설정이 있으므로 명령을 실행할 때만 다음 비밀번호가 필요합니다.

내가 얻은 가장 가까운 것은 이것이었다 echo "mypass" |ssh -tt user@ip "sudo specialCommand"

출력은 다음과 같습니다.

mypass  
[sudo] password for user: 
specialCommand requests inputfile contents

mypass는 이전에 인쇄되었으며 비밀번호 프롬프트도 허용되었습니다.

commandInput비밀번호가 승인된 후 파이프로 연결하려는 파일이 있습니다.

나는 단지 추측 게임에 불과한 다양한 시도를 했지만 실패했습니다. 어떻게 하면 이를 달성할 수 있습니까?

답변1

어때요?

(echo "mypass"; cat commandInput) | ssh -tt user@ip "sudo specialCommand"

또는 분명히 sudo원격 호스트에 액세스 할 수 있으므로 visudo이 줄을 /etc/sudoers( using뒤쪽에sudo비밀번호 액세스를 허용하는 기존 행 user)?

user  ALL=(root) NOPASSWD: /full/path/of/specialCommand

이 줄은 사용자 (다른 사람이 아닌)에게 비밀번호 없이 user루트(다른 사용자는 제외)로 실행할 수 있는 권한을 부여합니다. specialCommand이 줄을 통해 다른 명령을 실행하려면 sudo평소와 같이 비밀번호가 필요합니다.

그 후에는 다음을 간단히 수행할 수 있습니다.

ssh -tt user@ip "sudo specialCommand" < commandInput

답변2

specialCommand실제로 tty가 필요하지 않고 ssh 비밀번호 프롬프트용으로만 tty를 만들어야 하는 경우 다른 옵션은 다음과 같습니다.sudo

(echo "mypass" ; cat commandInput) | ssh user@ip "sudo -Sp '' specialCommand"

옵션을 사용하면 -S표준 입력(이 경우 sudo사용자 입력)에서 비밀번호를 읽을 수 있으며 옵션을 사용하면 비밀번호 프롬프트가 표시되지 않습니다.echo "mypass"-p ''

그런 다음 적절한 권한으로 보호되는 별도의 파일에 비밀번호를 넣을 수 있습니다. 이는 일반적으로 스크립트에 비밀번호를 직접 연결하는 것보다 더 나은 방법입니다. 명령은 다음과 같습니다.

cat passwordFile commandInput | ssh user@ip "sudo -Sp '' specialCommand"

후자의 경우,확실하게 하다비밀번호 파일에는 한 줄만 있어야 하며, 비밀번호만 있고 다른 내용은 없어야 합니다. 그렇지 않으면 비밀번호 줄 뒤의 내용이 specialCommand.

관련 정보