su
명령 에 암호를 전달할 수 있는 스크립트를 작성하고 싶습니다 . 그 이유는 루트가 아닌 계정에서 루트에 로그인하는 프로세스를 자동화하기 위한 것입니다. 보안에 대한 기본적인 이해를 통해 나는 이 작업의 위험성을 알고 있습니다. 파일에서 비밀번호를 읽어 루트 사용자 비밀번호를 해독하려면 여전히 이 정보가 필요합니다.
상호 작용을 자동화하기 위해 이 명령을 사용한다는 이야기를 들어본 적이 있지만 이 expect
명령이 어떻게 작동하는지, 이 경우에도 작동하는지 여부는 알 수 없습니다. 사용법에 대한 정보를 expect
주시면 감사하겠습니다.
sudo
내 사용자가 sudoer 목록에 없으므로 이는 옵션이 아닙니다.
시도한 사항 - 파이프를 사용하여 비밀번호를 전달하는 것이 잘못된 유형으로 인해 작동하지 않습니다 "su must be used from terminal"
. - 에코된 내용을 사용하여 비밀번호를 전달하면 echo
비밀번호를 입력한 후에만 표시됩니다.
답변1
"한 줄 스타일"을 수행하십시오.
expect -c 'spawn su - ;expect Password:;send "your-password\n";interact'
출력을 확인하여 su -
비밀번호를 캡처하는 데 사용할 올바른 문구인지 확인하세요. 여기서는 Linux 번역을 사용하고 있으므로 단어는 "Password:"가 아닌 "Senha:"여야 합니다.
expect -c ''
:이 명령에 대해 다음을 실행하십시오.spawn su -
:이 명령을 실행expect Password:
비밀번호라는 단어가 뭔가를 할 것으로 예상send "your-password\n"
: 비밀번호를 입력하고 Enter를 누르세요.interact
: 명령을 대화형으로 준비된 상태로 유지합니다.
답변2
expect
당신은 당신을 위해 일을 수행하는 데 사용할 수 있습니다 . 다음을 파일에 저장하고 실행 가능하게 만든 후 실행합니다.
#!/usr/bin/expect
spawn su
expect "Password:"
send "YOUR_PASS\n"
interact
(물론 올바른 경로를 지정해야 합니다 expect
. /usr/bin/expect
이것을 예로 사용하고 있습니다.)
루트 비밀번호가 정확 하다면 YOUR_PASS
이제 루트 쉘이 생겼을 것입니다. 그렇지 않은 경우 인증 실패 메시지를 받게 됩니다.
interact
이 명령은 완전히 자동화된 스크립트 컨텍스트에서는 필요하지 않을 수도 있습니다. 프로세스 제어권을 사용자에게 넘기기 때문입니다. 즉, 현재 프로세스에 키 입력을 보내고 stderr 및 stderr을 반환합니다.
man expect
spawn
, expect
, send
및 기타 여러 명령 interact
에 대한 자세한 설명은 참고자료를 참조하세요 .