Shell Script per l'accesso a un server SSH


29

Ho provato a scrivere uno script di shell che può fare il login automatico in un server SSH usando la password che è menzionata nello script. Ho scritto il seguente codice:

set timeout 30
/usr/bin/ssh -p 8484 root@172.31.72.103
expect 
{
   "root@172.31.72.103's password" 
   {
      send "password\r" 
   }
}

Questo codice non funziona correttamente, tuttavia richiede la password. Qualcuno può aiutarmi per favore a risolvere questo



Risposte:


36

Una volta ho scritto uno expectscript per accedere a un server SSH (come il tuo caso) e il mio script era qualcosa del genere:

#!/usr/bin/expect

spawn ssh MyUserName@192.168.20.20
expect "password"
send "MyPassword\r"
interact

Penso che forse interactmanchi nella tua sceneggiatura.


Questo è assolutamente lavorando bene per me e mi sono bloccato in questo luogo, interagiscono fornisce terminale interattivo con il richiamo, ma sto cercando di automatizzare ulteriormente più passaggi piace fare cde lse leggere il contenuto del file pure. È possibile fare dopo l'interazione? Per favore, rispondi
Hansiemithun,

@Hansie puoi inviare un lscomando dopo il login. Ad esempio, dopo aver inviato la password, eseguire una operazione expectcon il testo del prompt dei comandi (per assicurarsi di aver effettuato l'accesso), quindi send "ls\r". Tutti questi vanno prima interact.
Saeedn,

la domanda era leggermente errata e mi dispiace dopo aver fatto ls e letto i contenuti, sono in grado di stampare lo stesso. Ma come farlo uscire dalla sessione ssh in una variabile per accedere dal computer locale. rif: stackoverflow.com/questions/32341234/expect-script-return-value . Ma l'output non funziona per me. La mia domanda pubblicata: stackoverflow.com/questions/51628465/… . Ho bisogno file_listdopo l'uscita per accedere dal prompt dei comandi locale
Hansiemithun,

31

Stai andando nel modo sbagliato. Quello che vuoi fare è generare una coppia ssh-key senza password e quindi (purché il server supporti l'autenticazione con chiave RSA) puoi entrare senza dover digitare una password per tutti. Questo è un rischio per la sicurezza se la tua chiave privata viene archiviata in un luogo in cui potrebbe essere rubata.

Segui questi passi:

  1. mkdir -p ~/.ssh
  2. cd ~/.ssh
  3. ssh-keygen -type dsa -i mysshkeys
  4. stampa Return quando richiesto per passphrase
  5. Premere Returnuna seconda volta per confermare.

Ora ci saranno due file nella tua ~/.sshdirectory mysshkey.pube mysshkey. mysshkey.pubè la tua chiave pubblica, questa è sicura da mettere su server remoti. mysshkeyè la chiave senza password privata, è non è sicuro di mettere su server remoti (o da qualche qualcun altro potrebbe ottenere una copia).

Sul server che si desidera SSH in:

  1. Accedi al server remoto
  2. mkdir -p ~/.ssh
  3. Copia e incolla il contenuto di mysshkey.pub in~/.ssh/authorized_keys
  4. Assicurati che ~/.ssh/authorized_keyssia chmodcosì600

Ora, per metterlo in azione sul tuo computer locale, esegui il seguente comando:

ssh -i ~/.ssh/mysshkey <remote_server_ip>

E verrai effettuato l'accesso senza che ti venga richiesta una password.

Questo è un metodo molto preferibile per la gestione degli accessi automatizzati poiché non si finisce per codificare in modo rigido la password in più posizioni che devono essere aggiornate in caso di modifica.


2
Vorrei usare le chiavi RSA anziché DSA. Ma a parte questo, sono pienamente d'accordo.
glglgl,

12
a volte non è possibile aggiungere chiavi all'host remoto, ad esempio dispositivi di rete.
DarkHeart,

1
Ci ho provato ssh sta ancora chiedendo una password. Devi specificare un indirizzo IP? L'ho provato con <user> @ <domain-name> e solo con il nome di dominio.
Jay Bienvenu,

Questo comando ha detto troppi argomenti? (per il passaggio 3)
Joseph Astrahan,

Ho dovuto passare a ssh-keygen -t dsa e inserire invece manualmente il percorso del file.
Joseph Astrahan,

20

Nelle distribuzioni basate su Debian, il sshpasspacchetto fornisce un modo più semplice di fare ciò che vuoi. Il pacchetto è disponibile per molte altre distribuzioni popolari. Devi prima configurarlo:

echo 'YourPassword' > passwordFile.txt
chmod 600 passwordFile.txt

Quindi invoca il comando SSH da uno script come questo:

sshpass -f /path/to/passwordFile.txt /usr/bin/ssh -p 8484 root@172.31.72.103

Ciò offre maggiore flessibilità, ad esempio se si utilizza una locale diversa o è necessario modificare la password, rispetto alle soluzioni che utilizzano expect.


7

Innanzitutto installare sshPass sudo apt-get install sshpass

Quindi creare un alias nel file .bashrc come

alias sshLogin='sshpass -p <your ssh password> ssh username@remote_host'

Ora ricarica il tuo file .bashrc modificato da source ~/.bashrc

Ora hai finito.

Ora puoi eseguire ssh usando l'alias sopra creato sshLoginnel terminale.



2

Tutto quello che ti serve per creare una chiave con hash e salvarla sul tuo PC

Basta digitare

ssh-keygen -t rsa -b 4096 # just press Enter till the end

quindi entra

ssh-copy-id <user>@<server>

quindi accedi normalmente usando

ssh <user>@<server>

Ora non hai bisogno di una password

Nota: il salvataggio della password in un testo semplice è pericoloso

Questo metodo sta creando un valore con hash della tua password usando RSA con chiave pubblica di lunghezza 4096 che è molto sicura.


1
Questa sembra essere una ripetizione di questa risposta .
roaima,

#roaima Sì, ma suggerisce un ssh-copy-idcomando incredibilmente utile , che nessun altro ha menzionato. Lo sto votando per quello.
Huw Walters,

1

Accesso senza password SSH utilizzando SSH Keygen in 5 semplici passaggi :

Impostazione dell'ambiente: inserisci qui la descrizione dell'immagine

Passaggio 1: autenticazione SSH-Kegen Keys on - (192.168.0.12)
Prima accedi al server 192.168.0.12 con un utente e genera una coppia di chiavi pubbliche usando il comando seguente.

inserisci qui la descrizione dell'immagine

Passaggio 2: Creare la directory .ssh su - 192.168.0.11
Utilizzare SSH dal server 192.168.0.12 per connettere il server 192.168.0.11 per creare la directory .ssh al suo interno, usando il comando seguente.

inserisci qui la descrizione dell'immagine

Passaggio 3: caricare le chiavi pubbliche generate su - 192.168.0.11
Utilizzare SSH dal server 192.168.0.12 e caricare la nuova chiave pubblica generata (id_rsa.pub) sul server 192.168.0.11 nella .sshdirectory dell'utente come nome file authorized_keys.

inserisci qui la descrizione dell'immagine

Passaggio 4: impostare le autorizzazioni su - 192.168.0.11
A causa delle diverse versioni SSH sui server, è necessario impostare le autorizzazioni su .sshdirectory e authorized_keysfile.

inserisci qui la descrizione dell'immagine

Passaggio 5: Accedi da 192.168.0.12 a 192.168.0.11 Server senza password
Da ora in poi possiamo accedere a 192.168.0.11 come utente sheena dal server 192.168.0.12 come utente tecmint senza password.

inserisci qui la descrizione dell'immagine


Grazie ... ha funzionato per me, tranne che al punto 4 ho ricevuto un drammatico "avvertimento": "FILE CHIAVE PRIVATO NON PROTETTO! ... ... ... /. Ssh / id_rsa 'sono troppo aperti ... ... la chiave privata sarà ignorato ... permessi errati ". Ho fatto chmod 700 id_rsanella directory .ssh nel server locale (client, ad esempio 192.168.0.12 nel tuo esempio): problema risolto
mike rodent,


1

Come già descritto in altre risposte, lo uso anche sshpassma lo combino con il readcomando per memorizzare la mia password in una variabile di ambiente temporanea. In questo modo la mia password non viene mai scritta da nessuna parte in modo chiaro. Ecco il comando a una riga che utilizzo:

read -s PASS; sshpass -p $PASS ssh <user>@<host adress>

Dopodiché devi inserire la tua password (non appare nulla sullo schermo) e quindi premere Invio per aprire la connessione.


0

Di recente l'ho fatto, questo può aiutarti:

sshpass -p 'password' username@ipaddress

se non funziona, dovrai generare le chiavi nell'altra macchina con cui vuoi connetterti

ssh-keygen

genererà chiavi private e pubbliche e ti chiederà una posizione, lasciandola vuota salverà le chiavi nella cartella .ssh per impostazione predefinita ti chiederà la passphrase, puoi anche lasciarla vuota nella cartella .ssh e cambiare il nome della chiave pubblica in "authorized_keys"

cd .ssh/
mv id_rsa.pub authorized_keys
useradd -d /home/username username

questo aggiungerà l'utente all'elenco ora vai alla home directory e dà il permesso e riavvia i servizi sshd

chmod 700 /home/username/.ssh
chmod 644 /home/username/.ssh/authorized_keys
chown root:root /home/dozee
sudo service sshd restart

ora dovrai spostare la chiave privata nel sistema in quella posizione da dove eseguirai il comando ssh, quindi puoi connetterti con

sshpass -p 'password' ssh -i id_rsa username@ip

se anche quello non funziona, vai in / etc / ssh apri sshd_config con l'editor vim controlla se pubkeyAuthenticatoin è girato in yes o no, se non lo cambi in yes, riavvia i servizi sshd e poi provalo, sicuramente funzionerà .


0

Il primo argomento è hostname e il secondo è password.

     #!/usr/bin/expect
     set pass [lindex $argv 1]
     set host [lindex $argv 0]
     spawn ssh -t root@$host echo Hello
     expect "*assword: "
     send "$pass\n";
     interact

Esecuzione: ./script.expect

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.