una uber reconoce quiero que play introducido incorrecta has google escribio error cuenta correctamente contraseña cambiar cambiado anterior passwords prompt expect

passwords - uber - quiero cambiar mi contraseña de mi cuenta



¿Cómo puedo hacer una solicitud de script de espera para una contraseña? (3)

Alternativamente, podría dejar que ssh recopile la contraseña a través de X11 usando la variable de entorno SSH_ASKPASS.

De la página del manual:

> SSH_ASKPASS > If ssh needs a passphrase, it will read the passphrase from the > current terminal if it was run from a terminal. If ssh does not > have a terminal associated with it but DISPLAY and SSH_ASKPASS > are set, it will execute the program specified by SSH_ASKPASS > and open an X11 window to read the passphrase. This is particularly > useful when calling ssh from a .xsession or related script. > (Note that on some machines it may be necessary to redirect the > input from /dev/null to make this work.)

Tengo un script de expectativa que se conecta a algunos enrutadores a través de ssh. Todos estos enrutadores tienen la misma contraseña (lo sé, está mal), y la secuencia de comandos necesita saber esa contraseña para poder conectarse a los enrutadores. Actualmente, la contraseña se pasa a mi script como un argumento en la línea de comandos, pero esto significa que hay un rastro de esa contraseña en mi archivo .bash_history, así como en los procesos en ejecución. Así que en lugar de eso, me gustaría que se le solicite al usuario una contraseña, si es posible en silencio.

¿Sabe si es posible o no pedirle al usuario una contraseña con esperar?

Gracias.

Edición : si me conectara a servidores en lugar de enrutadores, probablemente usaría claves ssh en lugar de contraseñas. Pero los enrutadores que estoy usando solo soportan contraseñas.


OK, fusionando las 2 respuestas anteriores (o abajo o donde sea que estén ahora):

#!/usr/bin/expect log_user 0 set timeout 10 set userid "XXXXX" set pass "XXXXXX" ### Get two arguments - (1) Host (2) Command to be executed set host [lindex $argv 0] set command [lindex $argv 1] # grab the password stty -echo send_user -- "Password for $userid@$host: " expect_user -re "(.*)/n" send_user "/n" stty echo set pass $expect_out(1,string) spawn /usr/bin/ssh -l $userid $host match_max [expr 32 * 1024] expect { -re "RSA key fingerprint" {send "yes/r"} timeout {puts "Host is known"} } expect { -re "username: " {send "$userid/r"} -re "(P|p)assword: " {send "$pass/r"} -re "Warning:" {send "$pass/r"} -re "Connection refused" {puts "Host error -> $expect_out(buffer)";exit} -re "Connection closed" {puts "Host error -> $expect_out(buffer)";exit} -re "no address.*" {puts "Host error -> $expect_out(buffer)";exit} timeout {puts "Timeout error. Is host down or unreachable?? ssh_expect";exit} } expect { -re "/[#>]$" {send "term len 0/r"} timeout {puts "Error reading prompt -> $expect_out(buffer)";exit} } expect { -re "/[#>]$" {send "$command/r"} timeout {puts "Error reading prompt -> $expect_out(buffer)";exit} } expect -re "/[#>]$" set output $expect_out(buffer) send "exit/r" puts "$output/r/n"

Tenga en cuenta que cambié la variable $ password a $ pass para que sea coherente con la otra respuesta.


Usa el comando stty de stty como esto:

# grab the password stty -echo send_user -- "Password for $user@$host: " expect_user -re "(.*)/n" send_user "/n" stty echo set pass $expect_out(1,string) #... later send -- "$pass/r"

Tenga en cuenta que es importante llamar a stty -echo antes de llamar a send_user . No estoy seguro de por qué: creo que es un problema de tiempo.

Los programadores esperan que todos lean el libro: Explorando espera por Don Libes