Lo que intento hacer es ejecutar un comando ssh que imprima el /etc/shadow
archivo. Obviamente ese archivo requiere root o sudo
permiso, y no tengo credenciales de root, por lo tanto tengo que usar sudo
.
Aquí está el comando que he elaborado:
expect -c 'spawn -noecho ssh -q -t -S /tmp/t2.ssh dummy "sudo cat /etc/shadow";expect "assword"; send "password99\r";interact'
Genera exactamente lo que necesito, pero también muestra la solicitud de la contraseña de sudo en la primera línea:
[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:::
Sin utilizar otros programas (como grep, awk, tail, etc.), ¿hay alguna manera de modificar el expect
comando para que imprima solo la salida del comando cat y no el [sudo] password for student99:
mensaje?
Solución:
Gracias a @larsks, mi comando de trabajo final es:
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'
Respuesta1
Puede desactivar el registro de salida configurando log_user 0
. Delos documentos:
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.