TTY를 무시하지 않고 SU/Sudo/SSH에 비밀번호를 전달하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/233217

문제

나는 할 일 c 쉘 프로그램을 쓰고있다 su 또는 sudo 또는 ssh. 그들은 모두 stdin 또는 명령 줄 대신 콘솔 입력 (TTY)에서 암호를 원합니다.

아무도 해결책을 아는 사람이 있습니까?

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

옵션이 될 수 있지만 제거 시스템에는 존재하지 않습니다.

도움이 되었습니까?

해결책

Sudo의 경우 표준 입력에서 비밀번호를 수락하기위한 -S 옵션이 있습니다. 다음은 남자 항목입니다.

    -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는 자동화/스크립트를 자동화하려는 많은 시도를했습니다. 프롬프트하지 않고 암호를 명령에 전달할 수있는 빌드 방법이없는 것 같습니다. 다른 사람들이 언급했듯이 "예상하다"유틸리티는이 딜레마를 다루는 것을 목표로하는 것처럼 보이지만 궁극적으로 올바른 개인 키 승인을 설정하는 것은 이것을 자동화하려고 할 때 올바른 방법입니다.

다른 팁

대화 상자를 통해 비밀번호를 제기하는 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"

나를 위해 일합니다.

연결할 대상 호스트에서 공개/개인 키를 설정하여 수행 할 수 있습니다. 첫 번째 단계는 로컬 호스트에서 스크립트를 실행하는 사용자가 다음을 수행하여 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 지역 호스트로부터.

이 문제에 대한 일반적인 솔루션은 슈퍼 사용자 액세스가 필요한 작업을 수행하는 도우미 앱을 설정하는 것입니다.http://en.wikipedia.org/wiki/setuid

Sudo는 오프라인으로 사용되지 않습니다.

나중에 편집 : SSH는 개인-공공 키 인증과 함께 사용할 수 있습니다. 개인 키에 암호가없는 경우 비밀번호를 제기하지 않고 SSH를 사용할 수 있습니다.

Sudo에게는 이것도 할 수 있습니다.

sudo -S <<< "password" command

더 나은 선택이 없을 때 (다른 사람들이 제안한대로) Man Socat은 다음을 도울 수 있습니다.

   (sleep 5; echo PASSWORD; sleep 5; echo ls; sleep 1) |
   socat - EXEC:'ssh -l user server',pty,setsid,ctty

          EXEC’utes an ssh session to server. Uses a pty for communication
          between socat and ssh, makes it ssh’s  controlling  tty  (ctty),
          and makes this pty the owner of a new process group (setsid), so
          ssh accepts the password from socat.

모든 Pty, SetSid, Ctty 복잡성이 필요하며, 오랫동안 잠을 잘 필요는 없지만 잠을 자야합니다. ECHO = 0 옵션은 SSH의 명령 줄에서 원격 명령을 전달하는 것처럼 볼 가치가 있습니다.

어쩌면 당신은 사용할 수 있습니다 expect 명령?:

expect -c 'spawn ssh root@your-domain.com;expect password;send "your-password\n";interact

해당 명령은 비밀번호를 자동으로 제공합니다.

보세요 expect 리눅스 유틸리티.

STDIN의 간단한 패턴 매칭을 기반으로 Stdio에 출력을 보낼 수 있습니다.

키에 Pasphrase가없는 공개 키 인증을 위해 SSH를 설정하십시오. 그물에 가이드가 많이 있습니다. 로그인하려면 비밀번호가 필요하지 않습니다. 그런 다음 클라이언트 호스트 이름을 기반으로 키에 대한 연결을 제한 할 수 있습니다. 합리적인 보안을 제공하며 자동화 된 로그인에 적합합니다.

ssh -t -t me@myserver.io << EOF
echo SOMEPASSWORD | sudo -S do something
sudo do something else
exit
EOF

나는 같은 문제가 있었다. 대화 상자 스크립트 원격 PC에서 디렉토리를 작성합니다. SSH와의 대화는 쉽습니다. Sshpass (이전에 설치된)를 사용합니다.

   dialog --inputbox "Enter IP" 8 78 2> /tmp/ip

   IP=$(cat /tmp/ip)


   dialog --inputbox "Please enter username" 8 78 2> /tmp/user

   US=$(cat /tmp/user)


   dialog --passwordbox "enter password for \"$US\" 8 78 2> /tmp/pass

   PASSWORD = $(cat /tmp/pass)


   sshpass -p "$PASSWORD" ssh $US@$IP mkdir -p /home/$US/TARGET-FOLDER


   rm /tmp/ip

   rm /tmp/user

   rm /tmp/pass

독일의 인사

티투스

사용:

echo password | sudo command

예시:

echo password | sudo apt-get update; whoami

도움이되기를 바랍니다 ..

@Jahid의 답변을 바탕으로 MacOS 10.13에서 저를 위해 일했습니다.

ssh <remote_username>@<remote_server> sudo -S <<< <remote_password> cat /etc/sudoers

스크립트를 기대하는 매개 변수로 암호를 제공 할 수 있습니다.

echo <password> | su -c <command> <user> 

이것은 작동합니다.

기대 스크립트에서 암호를 하드 코딩하는 것은 Sudo가 최소한 명령을 기록하기 때문에 비밀번호가없는 sudo를 갖는 것과 동일합니다.

한 가지 방법은 read -s 옵션을 사용하는 것입니다.이 방법으로 암호 문자는 화면으로 다시 반향되지 않습니다. 일부 사용 사례에 대한 작은 스크립트를 작성했으며 내 블로그에서 볼 수 있습니다.http://www.datauniv.com/blogs/2013/02/21/a-quick-little-expect-script/

su -c "Command" < "Password"

도움이되기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top