È possibile passare le password su uno script di shell?


11

Da molto tempo sto cercando questo, vorrei sapere è possibile passare le password in uno script di shell? Molte delle risposte sono tornate con no. Recentemente ho letto un articolo in cui si afferma che come passare le password in uno script di shell. L'ho provato, ma non sembra funzionare. Questo è il collegamento . Qualcuno può fare il check-out e tornare indietro? Inoltre, mi dica che c'è un modo per passare le password in uno script di shell? Se nessun pls mi dice come Linux ottiene l'input per la password?

Risposte:


12

"Inserendo le password", probabilmente intendi inserire i dati senza essere visibili per l'utente.

(suggerito da geirha) Quando si utilizza bash, è possibile utilizzare l' -sopzione per impedire la visualizzazione dei caratteri digitati:

read -p "Password please: " -s pass

In alternativa, modificare il comportamento del terminale per nascondere i caratteri digitati con stty -echo(disabilita echo). Dopo aver letto la password con la shell integrata readin una variabile (nell'esempio seguente $pass), riaccenderla con stty echo. Poiché la nuova riga da Enterè nascosta a, devi stampare una nuova riga per ottenere l'output futuro su una nuova riga.

stty -echo
read -p "Password please: " pass
stty echo
printf '\n'

reade printfsono integrati nella shell. sttyè fornito dal coreutilspacchetto che è installato di default. Ciò significa che questo frammento è molto portatile.

Nota: l' -popzione non è standard, ma da bash. Se è necessario visualizzare un prompt in altre shell, utilizzare:

printf "Password please: "
stty -echo
read pass
stty echo
printf '\n'

Riferimenti:


Voglio solo dare la password di root del sistema remoto nello script. È possibile nel tuo caso?
karthick87,

@ karthick87: no, questo script acquisisce solo i dati inseriti dall'utente in modo interattivo. Se vuoi inserire le password di root negli script, perché non consideri gli accessi basati su chiavi?
Lekensteyn,

1
La lettura di Bash ha anche un'opzione per disabilitare l'eco durante la lettura in linea. Vedere help '\read'.
geirha,

In zshesso è raggiungibile attraverso read -s 'pw?Prompt text', dove pwè una variabile in cui verrà posizionata la password ed -sè un flag per nascondere l'input.
Baldrs

2

A quale programma vuoi passare una password?

Lo script sul link funziona per me. Si noti che non è uno script di shell ma uno script di attesa (è necessario che il pacchetto expectsia installato`). L'uso di prevede un modo comune per automatizzare i programmi interattivi basati su testo.

Gli sshaccessi non interattivi vengono spesso eseguiti utilizzando l'autenticazione basata su chiave con una passphrase vuota.

Alcuni altri programmi (come sudo) hanno opzioni per leggere una password da stdin.

Fornire una password come opzione della riga di comando è spesso un problema di sicurezza in quanto sulla maggior parte dei sistemi qualsiasi utente può vedere i processi di altri utenti, inclusi gli argomenti della riga di comando utilizzando strumenti semplici come ps.


Voglio solo passare una password al programma ssh.
karthick87,

Quindi forse l'autenticazione con chiave funziona per te: usa ssh-keygenper creare una chiave di autenticazione (basta premere Invio quando ti viene chiesta una passphrase) e copiarla all'utente remoto usando ssh-copy-id. Se l'autenticazione con chiave è abilitata per sshd (è di default) ssh allora non chiederti una password.
Florian Diesch,

1

Uno script non dovrebbe mai davvero gestire le password. Qualunque applicazione abbia bisogno della password, richiedila da sola o, se ciò non è possibile, trova un modo migliore per autenticarti con l'applicazione. Si prega di leggere http://mywiki.wooledge.org/BashFAQ/069


0

C'è un modo per archiviare le password in uno script bash ma devi crittografare lo script in modo che nessuno possa effettivamente leggerlo o eseguire qualsiasi tipo di debugger su di esso per vedere esattamente cosa sta facendo. Per crittografare uno script bash / shell e renderlo effettivamente eseguibile, prova a copiarlo e incollarlo qui

Nella pagina sopra, tutto ciò che devi fare è inviare il tuo script (puoi prima inviare uno script di esempio per la tua tranquillità). Un file zip verrà generato per te. Fare clic con il tasto destro sul collegamento per il download e copiare l'URL fornito. Quindi, vai alla casella UNIX ed esegui i seguenti passaggi.

Installazione:

   wget link-to-the-zip-file
   unzip the-newly-downloaded-zip-file
   cd /tmp/KingLazySHIELD
   ./install.sh  /var/tmp/KINGLAZY/SHIELDX-(your-script-name) /home/(your-username)  -force 

Quello che il comando di installazione sopra farà per te è:

  1. Installerà lo script crittografato nella directory /var/tmp/KINGLAZY/SHIELDX-(your-script-name).

  2. Inserirà un collegamento a questo script crittografato in qualsiasi directory specificata in sostituzione /home/(your-username)- in questo modo, consente di accedere facilmente allo script senza dover digitare il percorso assoluto.

  3. Assicura che NESSUNO possa modificare lo script - Qualsiasi tentativo di modificare lo script crittografato lo renderà inutilizzabile ... fino a quando tali tentativi non verranno interrotti o rimossi.

  4. Assicura assolutamente che NESSUNO possa farne copie. Nessuno può copiare il tuo script in una posizione isolata e provare a rovinarlo per vedere come funziona. Tutte le copie dello script devono essere collegamenti alla posizione originale specificata durante l'installazione.

NOTA:

Non credo che questo funzioni per gli script interattivi che richiedono all'utente una risposta. I valori devono essere codificati nello script. La crittografia garantisce che nessuno possa effettivamente vedere quei valori, quindi non devi preoccuparti di questo.


-1

puoi semplicemente fare qualcosa del genere.

# echo -e "password_here\npassword_here" | su user

fonte

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.