비 대화식 ssh sudo…는 일반 텍스트로 비밀번호를 묻습니다. 대화식 ssh 명령을 실행 중입니다. ssh

비 대화식 ssh 명령을 실행 중입니다. ssh 인증은 ssh 에이전트를 통해 잘 처리되지만 sudo가 필요한 명령을 실행하면 터미널의 비밀번호 프롬프트가 일반 텍스트입니다. 예를 들면 다음과 같습니다.

ssh remotemachine "sudo -u www mkdir -p /path/to/new/folder"

일반 텍스트로 비밀번호를 입력하라는 메시지가 표시됩니다. 누구나 정상적인 보안 프롬프트를 사용하거나 스위치를 통해 암호를 전달할 수있는 방법을 알고 있습니까? (그러므로 명령을 보내기 전에이 쪽에서 보안 프롬프트를 설정할 수 있습니다)

도움을 주시면 감사하겠습니다.



답변

사용 ssh -t:

남자 ssh

-t   Force pseudo-tty allocation. This can be used to execute arbitrary
     screen-based programs on a remote machine, which can be very useful,
     e.g. when implementing menu services. Multiple -t options force tty
     allocation, even if ssh has no local tty.

그래서 당신의 명령은

ssh remotemachine -t "sudo -u www mkdir -p /path/to/new/folder"

비밀번호를 입력하지 않으려면 sudoerscommand를 사용하여 ( 허용 된 경우) 수정할 수 visudo있습니다.

NOPASSWD:예를 들어 매개 변수 추가

username ALL=(ALL) NOPASSWD: /bin/mkdir

/ etc / sudoers를 편집 할 수 없으면 다음을 사용할 수 있습니다 sudo -S.

남자 수도

-S      The -S (stdin) option causes sudo to read the password from
        the standard input instead of the terminal device.  The
        password must be followed by a newline character.

그것으로, 명령은

echo "your_password" | ssh remotemachine -t \
     "sudo -S -u www mkdir -p /path/to/new/folder"

이것은 쉘의 명령 히스토리에 bash를 추가한다는 것을 기억하십시오 (bash와 함께 ~/.bash_history파일 이 됩니다).