私がやろうとしているのは、ファイルを出力する 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:::
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.