내가 하려는 것은 파일을 인쇄하는 ssh 명령을 실행하는 것입니다 /etc/shadow
. 분명히 해당 파일에는 루트 또는 sudo
권한이 필요하며 루트 자격 증명이 없으므로 sudo
.
제가 작업한 명령은 다음과 같습니다.
expect -c 'spawn -noecho ssh -q -t -S /tmp/t2.ssh dummy "sudo cat /etc/shadow";expect "assword"; send "password99\r";interact'
필요한 내용을 정확하게 출력하지만 첫 번째 줄에 sudo 비밀번호에 대한 프롬프트도 출력합니다.
[sudo] password for student99:
root:$x$xxx:18029:0:99999:7:::
daemon:*:17575:0:99999:7:::
bin:*:17575:0:99999:7:::
sys:*:17575:0:99999:7:::
sync:*:17575:0:99999:7:::
expect
다른 프로그램(grep, awk, tail 등과 같은)을 사용하지 않고 프롬프트 가 아닌 cat 명령의 출력만 인쇄하도록 명령을 수정하는 방법이 있습니까 [sudo] password for student99:
?
해결책:
@larsks 덕분에 최종 작업 명령은 다음과 같습니다.
expect -c 'spawn -noecho ssh -q -t -S /tmp/t2.ssh dummy "sudo cat /etc/shadow";log_user 0;expect "assword"; send "password99\r";interact'
답변1
를 설정하여 출력 로깅을 비활성화할 수 있습니다 log_user 0
. 에서문서:
log_user -info|0|1
By default, the send/expect dialogue is logged to stdout (and a logfile if
open). The logging to stdout is disabled by the command "log_user 0" and
reenabled by "log_user 1". Logging to the logfile is unchanged.
The -info flag causes log_user to return a description of the most recent
non-info arguments given.