Eliminar la contraseña ingresada en la solicitud de contraseña oculta (Linux) con acceso directo

106

¿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.

bugybunny
fuente
77
Con respecto a Ctrl + A, en la terminal esto generalmente significa "ir al inicio de la línea". El conjunto de claves utilizadas en el terminal (especialmente bash) a menudo está más cerca de Emacs que de Windows.
Score_Under 01 de
18
Sshing como root generalmente se considera una práctica muy muy mala.
Sam
Para eliminar caracteres de la pantalla, necesitará usar secuencias de control del cursor (si su terminal las admite). Al ejecutar sshun script, puede analizar la cadena de parámetros antes de ejecutarla.
AFH
44
Por favor, preste atención a lo que dijo @Sam. Debe deshabilitar los inicios de sesión de root en todas partes. Inicie sesión como usuario normal con una contraseña complicada y luego supara 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.
kostix
@kostix Estoy bastante seguro de que desactivar las contraseñas debería ser el primer paso. Si está utilizando contraseñas, entonces con su y root deshabilitado, es solo cuestión de ingresar la contraseña que el atacante ya adivinó por segunda vez después de iniciar sesión, por lo que solo obtendrá algo si el nombre de usuario es difícil de adivinar (lo que a menudo no es t, supongo sin tener estadísticas). Y sin contraseña, agrega un segundo secreto, la contraseña, pero vale menos que la clave privada, que es un secreto más largo.
Nadie el

Respuestas:

163

Puede eliminar toda la contraseña escrita con Ctrl+ U.

Ipor Sircer
fuente
66
¡Esto también funciona en el indicador de terminal regular también!
MoonRunestar
35
Como referencia, esta es la combinación de teclas predeterminada en el "modo emacs" de readline 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 ).
IMSoP
22
@IMSoP Sin embargo, Ctrl-U en sí está integrado en el tty (como el carácter predeterminado para la stty killfunción), por lo que funciona con la solicitud de contraseña ssh.
Random832
55
Por cierto, Ctrl + K es el equivalente para eliminar del cursor al final de la línea.
wjandrea
2
@DennisJaheruddin: Eso no es posible, ssh no usa readline para proporcionar edición de línea. Mira mi respuesta.
Peter Cordes
14

A diferencia bash, sshla solicitud de contraseña de '' no usa ninguna biblioteca especial de entrada de terminal como readline. 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 eso
kill = ^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 cato cat > /dev/nullen tu terminal . Escriba cosas, luego vea qué funciona y qué no para editarlo.


readline(utilizado por bash) 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 ^ay deleteo izquierda / flecha hacia la derecha)

Cuando bashejecuta un comando en primer plano, primero pone el TTY en modo canónico (porque ese es el valor predeterminado). Por lo tanto, la ejecución stty -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á bashejecutando en él, puede ver qué configuración de terminal aplica bash + readline. por ejemplo, se stty -a < /dev/pts/12muestra -icanonpara el modo sin formato porque tengo una bashejecució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 corriera caten esa otra terminal, vería el icanonmodo 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

Peter Cordes
fuente
En realidad, solo puede escribir 'stty' para ver todas las configuraciones actuales. El uso de 'stty rows ##' o 'stty cols ##' le permitirá cambiar sobre la marcha cuántas filas o columnas tiene disponible la ventana de terminal. Lo cual es especialmente útil cuando está trabajando en una ventana en una ventana a través de algo como VNC que no necesariamente capta qué tan grande es la ventana exterior correctamente. Básicamente, puede definir su área activa para que sea más pequeña que la ventana en la que se encuentra y luego no tener que desplazarse. Permitir que VI y otras cosas sigan funcionando correctamente. También puede reasignar retroceso y eliminar sobre la marcha.
Rowan Hawkins el
@RowanHawkins: mi último párrafo fue mal editado. Corregido ahora. Estaba tratando de señalar que al redirigir desde otro tty, puede ver la sttyconfiguració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)
Peter Cordes