[linux] TTY를 무시하지 않고 암호를 su / sudo / ssh에 전달하는 방법은 무엇입니까?

suor sudo또는을 수행 할 C Shell 프로그램을 작성 중 ssh입니다. 그들은 모두 stdin이나 명령 줄 대신 콘솔 입력 (TTY)에 암호를 원합니다.

아무도 해결책을 알고 있습니까?

비밀번호없이 설정하는 sudo것은 옵션이 아닙니다.

옵션이 될 수 있지만 벗겨진 시스템에는 없습니다.



답변

sudo의 경우 표준 입력에서 비밀번호를 승인하는 -S 옵션이 있습니다. man 항목은 다음과 같습니다.

    -S          The -S (stdin) option causes sudo to read the password from
                the standard input instead of the terminal device.

이를 통해 다음과 같은 명령을 실행할 수 있습니다.

echo myPassword | sudo -S ls /tmp

ssh에 관해서는, 성공하지 않고 사용법을 자동화 / 스크립팅하려고 많은 시도를했습니다. 프롬프트없이 암호를 명령에 전달하는 기본 제공 방법이없는 것 같습니다. 다른 사람들이 언급했듯이, ” expect “유틸리티는 이러한 딜레마를 해결하기위한 것 같지만 궁극적으로 올바른 개인 키 인증을 설정하는 것이 자동화를 시도 할 때 올바른 방법입니다.


답변

대화 상자를 통해 암호를 묻는 Applescript를 작성한 다음 다음과 같이 사용자 정의 bash 명령을 작성합니다.

echo <password> | sudo -S <command>

이것이 도움이되는지 확실하지 않습니다.

sudo가 사전 암호화 된 암호를 수락하면 스크립트 내에서 암호를 암호화하고 일반 텍스트 암호를 에코하는 것에 대해 걱정할 필요가 없습니다. 그러나 이것은 나와 내 상황에 효과적입니다.


답변

들어 ssh당신이 사용할 수 있습니다 sshpass:sshpass -p yourpassphrase ssh user@host .

sshpass를 먼저 다운로드해야합니다 🙂

$ apt-get install sshpass
$ sshpass -p 'password' ssh username@server


답변

나는 가지고있다 :

ssh user@host bash -c "echo mypass | sudo -S mycommand"

나를 위해 작동합니다.


답변

sudo의 경우 다음과 같이 할 수도 있습니다.

sudo -S <<< "password" command


답변

이 문제에 대한 일반적인 해결책은 수퍼 유저 액세스가 필요한 작업을 수행하는 도우미 앱을 설정하는 것입니다.
http://en.wikipedia.org/wiki/Setuid

Sudo는 오프라인에서 사용하기위한 것이 아닙니다.

나중에 편집 : SSH는 개인-공개 키 인증과 함께 사용할 수 있습니다. 개인 키에 암호가 없으면 암호를 묻지 않고 ssh를 사용할 수 있습니다.


답변

연결하려는 대상 호스트에서 공개 / 개인 키를 설정하면됩니다. 첫 번째 단계는 다음을 실행하여 로컬 호스트에서 스크립트를 실행하는 사용자에 대한 ssh 키를 생성하는 것입니다.

ssh-keygen
Enter file in which to save the key (/home/myuser/.ssh/id_rsa): <Hit enter for default>
Overwrite (y/n)? y

그런 다음 빈 암호를 입력하십시오. 그런 다음 ssh 키를 연결할 대상 호스트에 복사하십시오.

ssh-copy-id <remote_user>@<other_host>
remote_user@other_host's password: <Enter remote user's password here>

ssh 키를 등록 ssh remote_user@other_host하면 로컬 호스트에서 자동 응답을 수행 할 수 있습니다 .