[Nota dell'editore, 29 novembre 2021:tutti gli esempi di fornitura di una password sulla riga di comando includono il rischio che la password venga acquisita nella cronologia della shell dell'utente (se supportata) o visibile a tutti gli utenti del sistema nell'elenco dei processi. Gli esperti di sicurezza consigliano di eliminare tutti i file e di cancellare i log della shell.]
La connessione e il trasferimento di file a sistemi remoti è qualcosa che gli amministratori di sistema fanno continuamente. Uno strumento essenziale utilizzato da molti amministratori di sistema su piattaforme Linux è SSH. SSH supporta due forme di autenticazione:
- Autenticazione password
- Autenticazione con chiave pubblica
L'autenticazione con chiave pubblica è considerata la forma più sicura di questi due metodi, sebbene l'autenticazione con password sia la più popolare e semplice. Tuttavia, con l'autenticazione della password, all'utente viene sempre chiesto di inserire la password. Questa ripetizione è noiosa. Inoltre, SSH richiede anche un intervento manuale quando viene utilizzato in uno script di shell. Se è necessaria l'automazione quando si utilizza l'autenticazione con password SSH, allora un semplice strumento chiamato sshpass
è indispensabile.
Cos'è sshpass?
Il sshpass
l'utilità è progettata per eseguire SSH utilizzando keyboard-interactive modalità di autenticazione della password, ma in modo non interattivo.
SSH utilizza l'accesso TTY diretto per garantire che la password sia effettivamente emessa da un utente della tastiera interattiva. sshpass
esegue SSH in un TTY dedicato, inducendo SSH a pensare che stia ottenendo la password da un utente interattivo.
Installa sshpass
Puoi installare sshpass
con questo semplice comando:
# yum install sshpass
Usa sshpass
Specifica il comando che desideri eseguire dopo sshpass
opzioni. In genere, il comando è ssh
con argomenti, ma può anche essere qualsiasi altro comando. La richiesta della password SSH, tuttavia, è attualmente codificata in sshpass
.
La sinossi di sshpass
comando è descritto di seguito:
sshpass [-ffilename|-dnum|-ppassword|-e] [options] command arguments
Dove:
-ppassword
The password is given on the command line.
-ffilename
The password is the first line of the file filename.
-dnumber
number is a file descriptor inherited by sshpass from the runner. The password is read from the open file descriptor.
-e
The password is taken from the environment variable "SSHPASS".
Esempi
Per comprendere meglio il valore e l'uso di sshpass
, diamo un'occhiata ad alcuni esempi con diverse utilità, tra cui SSH, Rsync, Scp e GPG.
Esempio 1:SSH
Usa sshpass
per accedere a un server remoto utilizzando SSH. Supponiamo che la password sia !4u2tryhack
. Di seguito sono riportati diversi modi per utilizzare le opzioni sshpass.
A. Usa il -p
(questa è considerata la scelta meno sicura e non dovrebbe essere utilizzata):
$ sshpass -p !4u2tryhack ssh [email protected]
Il -p
l'opzione è simile a questa quando viene utilizzata in uno script di shell:
$ sshpass -p !4u2tryhack ssh -o StrictHostKeyChecking=no [email protected]
B. Usa -f
opzione (la password dovrebbe essere la prima riga del nome del file):
$ echo '!4u2tryhack' >pass_file
$ chmod 0400 pass_file
$ sshpass -f pass_file ssh [email protected]
Il $ chmod 0400 pass_file
è fondamentale per garantire la sicurezza del file delle password. L'umask predefinito su RHEL è 033, che consentirebbe la leggibilità mondiale del file.
Ecco il -f
opzione quando utilizzato nello script della shell:
$ sshpass -f pass_file ssh -o StrictHostKeyChecking=no [email protected]
C. Usa il -e
opzione (la password dovrebbe essere la prima riga del nome del file):
$ SSHPASS='!4u2tryhack' sshpass -e ssh [email protected]
Il -e
l'opzione quando utilizzata nello script della shell è simile a questa:
$ SSHPASS='!4u2tryhack' sshpass -e ssh -o StrictHostKeyChecking=no [email protected]
Esempio 2:Rsync
Usa sshpass
con rsync
:
$ SSHPASS='!4u2tryhack' rsync --rsh="sshpass -e ssh -l username" /custom/ host.example.com:/opt/custom/
Quanto sopra utilizza il -e
opzione, che passa la password alla variabile di ambiente SSHPASS
Possiamo usare il -f
cambia in questo modo:
$ rsync --rsh="sshpass -f pass_file ssh -l username" /custom/ host.example.com:/opt/custom/
Esempio 3:Scp
Usa sshpass
con scp:
$ scp -r /var/www/html/example.com --rsh="sshpass -f pass_file ssh -l user" host.example.com:/var/www/html
Esempio 4:GPG
Puoi anche usare sshpass
con un file crittografato con GPG. Quando il -f
switch è utilizzato, il file di riferimento è in chiaro. Vediamo come possiamo crittografare un file con GPG e usarlo.
Innanzitutto, crea un file come segue:
$ echo '!4u2tryhack' > .sshpasswd
Quindi, crittografa il file utilizzando gpg
comando:
$ gpg -c .sshpasswd
Rimuovere il file che contiene il testo in chiaro:
$ rm .sshpasswd
Infine, usalo come segue:
$ gpg -d -q .sshpasswd.gpg | sshpass ssh [email protected]
Concludi
sshpass
è uno strumento semplice che può essere di grande aiuto per gli amministratori di sistema. Questo non sovrascrive in alcun modo la forma più sicura di autenticazione SSH, che è l'autenticazione a chiave pubblica. Tuttavia, sshpass
può anche essere aggiunto alla casella degli strumenti dell'amministratore di sistema.
[ Corso online gratuito:panoramica tecnica di Red Hat Enterprise Linux. ]