¿Hay alguna forma de eliminar todos los caracteres que ingresé en una solicitud de contraseña oculta en Linux? Por ejemplo, cuando envío SSH a un servidor, me pide mi contraseña donde no se muestran las claves ingresadas:
$ ssh root@somehost
root@somehost's password:
¿Hay alguna forma de eliminar todo mi texto ingresado sin tener que presionar la tecla de retroceso durante un período de tiempo desconocido? Cuando creo que ingresé algo incorrecto, quiero comenzar de nuevo y presionar la tecla de retroceso durante unos segundos es molesto. Intenté Esc, CtrlAcon suerte, seleccionar todo el texto y Home. CtrlCcancela todo el comando y tengo que enviar el comando nuevamente para volver a intentarlo. Esta es casi la mejor y más rápida solución, pero aún así no es satisfactoria. Insertar tampoco funciona en mi shell.
fuente
ssh
un script, puede analizar la cadena de parámetros antes de ejecutarla.su
para convertirse en root. El siguiente paso es deshabilitar los esquemas de autenticación basados en contraseña en SSH y usar las teclas para iniciar sesión.Respuestas:
Puede eliminar toda la contraseña escrita con Ctrl+ U.
fuente
unix-line-discard
, descrito como "Matar hacia atrás desde el cursor hasta el comienzo de la línea actual". Ref: cnswww.cns.cwru.edu/php/chet/readline/rluserman.html#SEC17 GNU readline es la biblioteca de entrada utilizada por la mayoría de los shells y muchos otros programas interactivos (pero no está integrada en el tty, por lo que no trabajar en todas partes ).stty kill
función), por lo que funciona con la solicitud de contraseña ssh.A diferencia
bash
,ssh
la solicitud de contraseña de '' no usa ninguna biblioteca especial de entrada de terminal comoreadline
. Las funciones de edición de línea son solo las funciones de edición de línea POSIX TTY de línea de base.Entonces tiene un POSIX TTY en modo "cocinado" (no crudo), también conocido como modo canónico, y la única edición de línea que está disponible es la que proporciona el núcleo. Mira
stty(1)
y nota esokill = ^U
. Aquí también se define el carácter de retroceso (erase = ^?
). Word-erase (^W
) es conveniente cuando no está escribiendo a ciegas.lnext = ^V
significa que puede escribir control-v y luego cualquier cosa (incluido control-c) para obtener un control-c literal.Para depurar lo que intentabas hacer a ciegas, ejecuta
cat
ocat > /dev/null
en tu terminal . Escriba cosas, luego vea qué funciona y qué no para editarlo.readline
(utilizado porbash
) lee el carácter sin formato y realiza la edición de línea en el espacio del usuario. Sin embargo, sus enlaces predeterminados son compatibles con los caracteres de control TTY predeterminados para el subconjunto de funciones de edición que ambos proporcionan.readline va mucho más allá de la simple edición de línea de un TTY simple. (por ejemplo, un teléfono de texto sólo puede borrar caracteres al final de la línea, lo que no hay
^a
ydelete
o izquierda / flecha hacia la derecha)Cuando
bash
ejecuta un comando en primer plano, primero pone el TTY en modo canónico (porque ese es el valor predeterminado). Por lo tanto, la ejecuciónstty -a
(sin redireccionamiento) siempre verá su propio terminal en modo canónico. Pero si redirige la entrada de algún otro TTY que se estábash
ejecutando en él, puede ver qué configuración de terminal aplica bash + readline. por ejemplo, sestty -a < /dev/pts/12
muestra-icanon
para el modo sin formato porque tengo unabash
ejecución en ese terminal. (Cambié a otra pestaña y corrítty
, luego usé la ruta del archivo del dispositivo desde el primer terminal). Si corrieracat
en esa otra terminal, vería elicanon
modo canónico.Relacionado: El TTY desmitificado
https://www.gnu.org/software/libc/manual/html_node/Canonical-or-Not.html
https://en.wikipedia.org/wiki/POSIX_terminal_interface
fuente
stty
configuración / ioctl que bash + readline se ha aplicado en modo sin procesar. (Y el hecho de que está en modo bruto, donde la mayoría de los caracteres especiales no se aplican)