su
or sudo
또는을 수행 할 C Shell 프로그램을 작성 중 ssh
입니다. 그들은 모두 stdin이나 명령 줄 대신 콘솔 입력 (TTY)에 암호를 원합니다.
아무도 해결책을 알고 있습니까?
비밀번호없이 설정하는 sudo
것은 옵션이 아닙니다.
배고 있다 옵션이 될 수 있지만 벗겨진 시스템에는 없습니다.
su
or 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 "유틸리티는 이러한 딜레마를 해결하기위한 것 같지만 궁극적으로 올바른 개인 키 인증을 설정하는 것이 자동화를 시도 할 때 올바른 방법입니다.
nonroot:yourpassword@hostname.com
? 물론 키 인증과 키 관리자를 사용하면 훨씬 쉽습니다.
'cat pw | sudo -S <command>
그리고 나중에 rm pw
.
nc -l 12345 | sudo -S <command>
입니다. 송신 측에서; echo myPassord | nc <target> 12345
. 이것은 암호 처리 문제를 옮기지 만 더 많은 옵션이있는 마스터 콘솔로 이동합니다.
나는 가지고있다 :
ssh user@host bash -c "echo mypass | sudo -S mycommand"
나를 위해 작동합니다.
이 문제에 대한 일반적인 해결책은 수퍼 유저 액세스가 필요한 작업을 수행하는 도우미 앱을 설정하는 것입니다. 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
하면 로컬 호스트에서 자동 응답을 수행 할 수 있습니다 .
어쩌면 expect
명령을 사용할 수 있습니까? :
expect -c 'spawn ssh root@your-domain.com;expect password;send "your-password\n";interact
이 명령은 암호를 자동으로 제공합니다.
더 나은 선택이 없다면 (다른 사람들이 제안한대로) 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의 명령 행에서 원격 명령을 전달하는 것처럼 볼만한 가치가 있습니다.
su
잘 작동 합니다. su
-S (stdin) 옵션이 없습니다.
키에 암호를 입력하지 않고 공개 키 인증을 위해 SSH를 설정하십시오. 그물에 가이드로드. 그런 다음 로그인 할 때 비밀번호가 필요하지 않습니다. 그런 다음 클라이언트 호스트 이름을 기준으로 키 연결을 제한 할 수 있습니다. 합리적인 보안을 제공하며 자동 로그인에 적합합니다.
나는 같은 문제가 있었다. 원격 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
독일에서 인사
타투 스
더 나은 sshpass
대안은 다음과 같습니다. passh
https://github.com/clarkwang/passh
원격 서버에 로그인
$ passh -p password ssh user@host
원격 서버에서 명령을 실행하십시오.
$ passh -p password ssh user@host date
비밀번호를 전달하는 다른 방법
-p 패스워드 (디폴트 :`password ')
-p env : env var에서 비밀번호 읽기
-p 파일 : 파일에서 비밀번호 읽기
여기에서 sshpass 및 기타 솔루션보다 나은 이유를 설명했습니다.
echo <password> | su -c <command> <user>
작동합니다.
su
에서 비밀번호를 읽습니다 .
expect 스크립트에서 암호를 하드 코딩하는 것은 암호가없는 sudo를 갖는 것과 동일합니다. sudo는 최소한 명령을 기록하기 때문입니다.
한 가지 방법은 read -s 옵션을 사용하는 것입니다.이 방법으로 암호 문자가 화면에 다시 에코되지 않습니다. 일부 유스 케이스에 대한 작은 스크립트를 작성했으며 내 블로그에서 볼 수 있습니다 : http://www.datauniv.com/blogs/2013/02/21/a-quick-little-expect-script/