我试图执行一个 ssh 命令来打印出/etc/shadow
文件。显然该文件需要 root 或sudo
权限,而我没有 root 凭证,因此我必须使用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:::
如果不使用其他程序(如 grep、awk、tail 等),有没有办法修改expect
命令,使其仅打印 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.