Come SSH in una riga

20

Come collegarmi a un altro computer tramite SSH in una riga? Se dovessi fare ssh host@IP , mi richiederebbe di inserire la password nella seconda riga. Stavo pensando che avrei potuto fare qualcosa di simile: ssh host@IP | echo password , ma che inserisce la password prima di chiedere la password.

    
posta Ben A. 04.06.2017 - 22:13
fonte

4 risposte

75

Dovresti usare le chiavi SSH per autenticare piuttosto che mettere la tua password sulla riga di comando dato che è estremamente non sicuro.

Il modo in cui funziona è una volta che hai configurato le tue chiavi SSH, tutto ciò che devi fare è emettere il comando:

ssh user@host

e senza digitare un'altra cosa, verrai automaticamente loggato.

Copia la chiave pubblica SSH su Mac / FreeBSD / Linux da macOS

Si presume che tu abbia accesso al server remoto tramite autenticazione basata su password (digitando una password) e che tu abbia già generato la tua coppia di chiavi privata / pubblica (in caso contrario, vedi sotto). Nel seguente esempio, stiamo usando RSA. Per cominciare, copia la chiave (tieni presente che la directory "home" è diversa tra macOS, Linux, BSD, ecc.):

Utilizzo di SCP:

scp ~/.ssh/id_rsa.pub username@hostname:/Users/username/.ssh/

O semplicemente cat-ing il file in authorized_keys (preferisco questo metodo):

cat id_rsa.pub | ssh username@hostname ' cat >>.ssh/authorized_keys'

(Il tuo nome chiave potrebbe essere diverso) Se la directory .ssh non esiste sul server remoto dovrai effettuare il login e crearla.

Ora la chiave è stata copiata dal mac al server remoto . Imposta le autorizzazioni corrette per la chiave pubblica SSH sul server remoto:

chmod 600  ~/.ssh/id_rsa.pub

Quindi aggiungi la chiave al file authorized_keys SSH, se il file non esiste, creala.

Se il file authorized_keys esiste già in ~/.ssh , usa il seguente comando:

cat id_rsa.pub >> authorized_keys

Se il file non esiste, inserisci i seguenti comandi:

cat id_rsa.pub > authorized_keys

chmod 600 authorized_keys
chown user:group authorized_keys

Genera chiave pubblica / privata SSH su macOS

Apri il Terminale andando su Applicazioni - > Utilità - > Terminale

Nel terminale, usa il seguente comando per avviare la generazione della chiave

ssh-keygen -t rsa

Successivamente ti verrà richiesto di fornire la posizione in cui desideri creare il file della chiave privata:

Inserisci il file in cui salvare la chiave ( /Users/username/.ssh/id_rsa ):

Lascia vuoto per creare la chiave nella posizione predefinita, che è /Users/username/.ssh/id_rsa . Il file della chiave pubblica verrà creato nella stessa posizione e con lo stesso nome, ma con l'estensione .PUB.

Dopo ti verrà richiesto di scegliere una passphrase. Questa è la password opzionale per utilizzare la chiave privata.

Enter passphrase (empty for no passphrase):

La tua chiave SSH è stata generata.

Ora, tieni presente che se inserisci una passphrase ti verrà richiesto di inserirla ogni volta che ti connetti. L'utility ssh-agent manterrà la passphrase in memoria alleggerendo la necessità di inserirla manualmente ogni volta che ci si connette mentre si è nella stessa sessione. Per maggiori dettagli vedi man ssh-agent

    
risposta data 04.06.2017 - 22:41
fonte
11

Ci sono diverse possibilità. Il tuo esempio ovviamente non funzionerà, ma puoi ottenere qualcosa di simile usando sshpass utility:

sshpass -p password ssh host@IP

Nota, questo non è raccomandato perché password sarà visibile per altri processi o nella cronologia della shell.

Un modo molto migliore per fare lo stesso è impostare l'autenticazione senza password usando i tasti SSH. In breve:

ssh-keygen -t rsa -f ~/.ssh/id_rsa
ssh-copy-id IP
    
risposta data 04.06.2017 - 22:26
fonte
3

Usare expect è semplicemente sbagliato accedere a una connessione ssh per qualcosa di diverso da una suite di test.

Quello che @ ben-a sta cercando è già implementato in ssh. Il trucco è come usarlo. Quindi ecco qui:

  1. Genera una coppia di chiavi pubblica / privata utilizzando ssh-keygen . Utilizza ECDSA o RSA come -t (o tipo) e per RSA usa 2048 o 4096 come -b (o lunghezza BITS). Questo dovrebbe essere sufficiente al momento della scrittura. Usa SEMPRE una PASSWORD!
  2. Utilizza il ssh-copy-id o la metodologia sopra menzionata per creare sul computer su cui stai loggando (a.k.a. il server) il file ~/.ssh/authorized_keys . All'interno c'è una copia della chiave pubblica che hai appena generato.
  3. Ora sulla macchina che usi per accedere al 'server' (o client) apri il file ~/.ssh/config . Se non esiste puoi crearlo.
  4. In questo file, aggiungi quanto segue per le tue esigenze

    host <name you want to use for this connection>
        Hostname <DNS or IP of the server>
        user <user name you want to use>
        identitiesonly yes
        identityfile <path to the private key>
    
  5. Ora puoi utilizzare solo ssh <name> per configurare la connessione, ma sarà comunque necessaria la password per la tua chiave. Per risolvere questo problema, usa lo ssh-agent per lo scopo sviluppato e incluso. Per aggiungere la tua chiave all'agente usa solo ssh-add <path to keyfile> . Ti verrà chiesta la password e la chiave verrà archiviata in modo sicuro per questa sessione. Se restituisce l'errore "impossibile trovare l'agente ssh" (o simile), ciò significa che probabilmente l'agente non è stato avviato. Puoi avviarlo per questa sessione usando ssh-agent bash . Questo avvierà una nuova shell con l'agente attivo in essa.

Quando usi questi passaggi, non solo rendi più difficile per qualcuno impersonare te dirottando le tue credenziali, ma anche mantenere l'usabilità in ordine (è più facile da usare delle semplici password).

    
risposta data 06.06.2017 - 14:55
fonte
2

Ho passato molto tempo a cercare la risposta anche a questo. Nonostante sia insicuro e tutte queste persone che ti dicono di usare le chiavi RSA ( che è un'idea più sicura e affidabile ), è abbastanza possibile.

Utilizza un programma chiamato expect per questo. Aspettatevi guarderà lo stdout (e credo che stderr sia configurato correttamente) per voi, aspettando determinati messaggi e rispondendo a loro con l'output. L'aspettarsi di per sé è in realtà un linguaggio di scripting, e quando stavo facendo la stessa cosa, ho avuto davvero molto tempo per far funzionare correttamente il mio script a causa dei tempi. Tuttavia, prevede anche un'utilità pratica chiamata autoexpect .

Con autoexpect, ti guarderà e genererà uno script di aspettativa per te. È sufficiente eseguire autoexpect e il comando desiderato:

autoexpect ssh host@ip 

e fai ciò che faresti normalmente. Quando esci dal programma (digitando exit nella shell ssh'd), verrà generato lo script. Nel caso in cui non si desideri che l'intero script che si sta scrivendo sia in uno script previsto, è possibile modificare lo script da autoexpect (chiamato script.exp ) per uscire prima di digitare il comando exit nella shell. La linea che vuoi spostare per cambiare la fine dello script è:

expect eof

che significa aspettarsi la fine del file. Spero che questo aiuti!

    
risposta data 05.06.2017 - 14:58
fonte

Leggi altre domande sui tag