Elimina la password inserita nel prompt delle password nascoste (Linux) con collegamento


106

C'è un modo per eliminare tutti i caratteri che ho inserito in una richiesta di password nascosta in Linux? Ad esempio, quando accedo a un server SSH, mi chiede la password in cui non vengono visualizzate le chiavi immesse:

$ ssh root@somehost
root@somehost's password:

C'è un modo per eliminare tutto il mio testo inserito senza dover premere backspace per un periodo di tempo sconosciuto? Quando penso di aver inserito qualcosa di sbagliato, voglio ricominciare da capo e premere backspace per alcuni secondi è fastidioso. Ho provato Esc, CtrlAspero di selezionare l'intero testo e Home. CtrlCannulla l'intero comando e devo inviare nuovamente il comando per riprovare. Questa è quasi la soluzione migliore e più veloce ma ancora non soddisfacente. L'inserimento non funziona neanche nella mia shell.


7
Per quanto riguarda Ctrl + A, nel terminale questo di solito significa "vai all'inizio della linea". Il set di chiavi utilizzato nel terminale (specialmente bash) è spesso più vicino a Emacs che a Windows.
Score_Under

18
Sshing come root è generalmente considerato una pessima pratica.
Sam,

Per eliminare i caratteri dallo schermo, dovrai utilizzare le sequenze di controllo del cursore (se il tuo terminale li supporta). Eseguendo sshda uno script, è possibile analizzare la stringa del parametro prima di eseguirla.
AFH,

4
Si prega di prestare attenzione a ciò che @Sam ha detto. È necessario disabilitare gli accessi root ovunque. Accedi come un utente normale con una password complicata e poi sudiventa root. Il prossimo passo è disabilitare gli schemi di autenticazione basati su password in SSH e usare le chiavi per il login.
kostix,

@kostix Sono abbastanza sicuro che disabilitare le password dovrebbe essere il primo passo. Se stai usando le password, quindi con su e root disabilitato, è solo una questione di inserire la password che l'attaccante ha già indovinato una seconda volta dopo l'accesso, quindi ottieni qualcosa solo se il nome utente è difficile da indovinare (cosa che spesso non è suppongo senza avere statistiche). E senza login password aggiunge un secondo segreto, la password, ma questo vale meno della chiave privata che è un segreto più lungo.
Nessuno il

Risposte:


163

Puoi eliminare l'intera password digitata con Ctrl+ U.


6
Questo funziona anche nel normale prompt del terminale!
MoonRunestar

35
Per riferimento, questa è l'associazione di tasti predefinita nella "modalità emacs" di readline per unix-line-discard, descritta come "Uccidi all'indietro dal cursore all'inizio della riga corrente". Rif: cnswww.cns.cwru.edu/php/chet/readline/rluserman.html#SEC17 readline GNU è la libreria di input utilizzata dalla maggior parte delle shell e da molti altri programmi interattivi (ma non è integrata in tty, quindi questo non lo farà lavorare ovunque ).
IMSoP

22
@IMSoP Tuttavia, Ctrl-U stesso è integrato in tty (come carattere predefinito per la stty killfunzione), motivo per cui funziona con il prompt della password ssh.
Casuale 832

5
A proposito, Ctrl + K è l'equivalente per l'eliminazione dal cursore alla fine della riga.
wjandrea,

2
@DennisJaheruddin: Non è possibile, ssh non usa readline per fornire il line-editing. Vedi la mia risposta
Peter Cordes,

14

Diversamente bash, sshla richiesta della password non utilizza alcuna libreria speciale di input terminale come readline. Le funzioni di modifica delle linee sono solo le funzioni di modifica delle linee POSIX TTY di base.

Quindi hai un POSIX TTY in modalità "cotta" (non grezza), alias modalità canonica, e l'unica modifica di linea disponibile è quella fornita dal kernel. Vedi stty(1)e notalo
kill = ^U. Questo è anche il punto in cui è definito il carattere backspace ( erase = ^?). Word-erase ( ^W) è utile quando non si digita cieco.

lnext = ^V significa che puoi digitare control-v quindi qualsiasi cosa (incluso control-c) per ottenere un control-c letterale.

Per eseguire il debug di ciò che stavi cercando di fare alla cieca, eseguire cato cat > /dev/nullnel tuo terminale . Digita roba, quindi vedi cosa funziona e cosa non lo modifica.


readline(usato da bash) legge il carattere non elaborato ed esegue la modifica delle righe nello spazio utente. I suoi collegamenti predefiniti sono compatibili con i caratteri di controllo TTY predefiniti, tuttavia, per il sottoinsieme di funzionalità di modifica che entrambi forniscono.

readline va ben oltre la semplice modifica delle linee di un semplice TTY. (ad es. un TTY può cancellare solo i caratteri alla fine della riga, quindi non c'è nessuna ^ae deleteo freccia sinistra / destra)

Quando bashesegue un comando in primo piano, mette prima il TTY in modalità canonica (perché è l'impostazione predefinita). Pertanto, l'esecuzione stty -a(senza reindirizzamento) vedrà sempre il proprio terminale in modalità canonica. Ma se reindirizzi l'input da qualche altro TTY che è in bashesecuzione su di esso, puoi vedere quali impostazioni del terminale bash + readline sono state applicate. ad esempio stty -a < /dev/pts/12mostra -icanonper la modalità raw perché ho un bashfunzionamento su quel terminale. (Sono passato a un'altra scheda e ho eseguito tty, quindi ho utilizzato il percorso del file del dispositivo dal primo terminale). Se correvo catin quell'altro terminale, vedrei icanonper la modalità canonica.

Correlati: il TTY si è demistificato

https://www.gnu.org/software/libc/manual/html_node/Canonical-or-Not.html

https://en.wikipedia.org/wiki/POSIX_terminal_interface


In realtà puoi semplicemente digitare 'stty' per vedere tutte le impostazioni correnti. L'uso di 'stty righe ##' o 'stty cols ##' ti permetterà di cambiare al volo quante righe o colonne la finestra terminale ha a sua disposizione. Ciò è particolarmente utile quando lavori in una finestra in una finestra attraverso qualcosa come VNC che non rileva necessariamente la dimensione della tua finestra esterna. Fondamentalmente puoi definire la tua area attiva in modo che sia più piccola della finestra in cui si trova e quindi non devi scorrere intorno. Permettere a VI e ad altre cose di funzionare ancora correttamente. Può anche rimappare backspace ed eliminare al volo.
Rowan Hawkins,

@RowanHawkins: il mio ultimo paragrafo è stato modificato male. Riparato ora. Stavo cercando di sottolineare che, reindirizzando da un altro tty, puoi vedere le sttyimpostazioni / ioctl che bash + readline stesso ha applicato in modalità raw. (E il fatto che sia in modalità raw, in cui la maggior parte dei personaggi speciali non si applicano)
Peter Cordes,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.