aggiunta password a .ssh / config


24

Sto usando Ubuntu 12.04. Sto usando ssh per connettermi a molti server ogni giorno, quindi inserisco i loro parametri nel file .ssh / config ; come questo :

Host server1
User tux
Port 2202
HostName xxx.x.xx.x

C'è un modo per mettere le password in questo file, per ogni connessione? Quindi, quando il server richiede una password, il terminale inserisce il suo pass e lo invia al server, quindi non è necessario digitare la password ogni volta. Inoltre, non voglio usare la coppia di chiavi pubblica / privata.


10
Questo è ciò che serve per le coppie di chiavi.
Michael Hampton

Risposte:


31

No, non esiste un metodo per specificare o fornire sulla riga di comando la password in modo non interattivo per l'autenticazione ssh usando un meccanismo incorporato openssh. Almeno non quello di cui sono a conoscenza. È possibile codificare la password in uno script di attesa, ma non è nemmeno una buona soluzione.

Sicuramente vorresti usare le coppie di chiavi per l'autenticazione senza password come affermava Michael, alla fine la chiave privata è praticamente una grande password nel file.


Il fatto è che sono i miei server client e non consentono l'accesso utilizzando le chiavi. Sto scrivendo uno script bash usando prevedere l'accesso per tutti i server in cui le credenziali vengono archiviate o prese da un dispositivo di archiviazione USB. Grazie
Ajo Augustine il

1
Abbastanza insicuro. L'unica cosa da suggerire in quello script per bloccare quel file con permessi per i file difficili.
Danila Ladner,

1
Se non consentono le chiavi, fraintendono il modo in cui ssh funziona - consentire l'accesso tramite password ti apre agli attacchi del dizionario ecc. (Anche se molto, molto lenti) - è quasi impossibile realizzare lo stesso con una coppia di chiavi private, e se sei preoccupato per le chiavi che finiscono nelle mani sbagliate puoi crittografare con password la parte privata della chiave in modo che tu abbia bisogno di due fattori per essere in grado di usarla (la password può anche essere ricordata nel tuo portachiavi / dal tuo agente ssh )
Alex Berry,

Educare i tuoi clienti. Spiega loro che è meglio disabilitare l'autenticazione con password e consentire solo le chiavi al contrario.
Nikita Kipriyanov

20

Per evitare la serie di commenti: Sì, questo è insicuro (nemmeno discutibilmente insicuro). Consiglio vivamente di farlo solo in una situazione di laboratorio su una rete isolata o in una situazione simile che non coinvolge server di produzione o server di produzione potenzialmente senza un reset / formato completo.

Volevo configurarlo perché non credo che il mio switch 2950 supporti le chiavi private / pubbliche e spero ad un certo punto di ottenere questa conoscenza, ma non ci sono ancora.

Utilizzando un alias e sshpass questo può essere realizzato.

  1. Installa sshpass
  2. Modifica il tuo file .ssh / config per includere lo username come elencato nella domanda
  3. Aggiungi un alias al tuo terminale (ho usato .bashrc e consiglierei contro le impostazioni gloabl)
  4. Utilizzare l'alias per accedere alla destinazione

Il mio alias di esempio è:

alias ssc='sshpass -pcisco ssh'

Dove "cisco" è la password. Nota che non c'è spazio tra -p e la password.

L'utilizzo è (riferendosi alla domanda):

ssc server1

Nota: questo risponde alla domanda nel titolo solo per coloro che utilizzano i motori di ricerca. Se si utilizzano server come nell'esempio della domanda, è necessario utilizzare coppie di chiavi private / pubbliche e non questa risposta


L'unica soluzione possibile, quando non puoi davvero lavorare con le chiavi per qualsiasi motivo.
sjas,

Lavori! Eccezionale.
Rahul,

Suggerirei di sostituire l'alias con uno script di shell completo; ciò darebbe l'opportunità di selezionare dinamicamente quale file password usare in base al parametro host.
7heo.tk,

Si potrebbe benissimo mettere uno spazio tra -p e la password, come spesso accade con i programmi cli ...
masterxilo,

10

Sì, come detto sopra, non è possibile salvare semplicemente la password. Consiglierei di usare la chiave SSH per l'autorizzazione.

prima di tutto, genera la tua chiave:

ssh-keygen

Quindi copia la chiave sui tuoi server / desktop:

ssh-copy-id -i .ssh/id_rsa.pub user@ip-address:

È tutto. Non ti verrà mai più richiesta la password.

Consiglio anche di rimuovere l'autorizzazione della password in generale, ma dipende da te.


1
Grazie per il riferimento a ssh-copy-id! Usavo un po 'di aggeggio come sshpass -p $PASSWORD ssh $USERNAME@$HOST "echo `cat ~/.ssh/id_rsa` >> /home/$USERNAME/.ssh/authorized_keys"ma questo programma è più pulito e rende chiara l'intenzione.
masterxilo,

3

Non c'è modo di farlo con ssh, è il più insicuro possibile.

Come ha detto Danila, potresti usare gli script previsti ma non mi preoccuperei.

Mi chiedo cosa stai cercando di ottenere? Vuoi passare da un server all'altro? In questo caso si desidera configurare e utilizzare ssh-agent sulla propria stazione di lavoro e abilitare l'inoltro dell'agente sugli host di destinazione; in questo modo lo scambio di credenziali verrà instradato al tuo agente locale senza dover copiare la tua chiave privata.


VisualStudio ha il concetto di token di accesso personali che sono come password specifiche per le app in cui questa funzionalità sarebbe utile.
spuder

1

Uso questo script dalla ~/.local/bindirectory

#!/usr/bin/bash

ORIG_SSH=/usr/bin/ssh
HOST=$1

SSHPASS=$(grep -Pzo "Host $HOST"'\s*\n((?!Host).*\n)*#PS\s(\N+)\n' ~/.ssh/config|tail -n 2|head -n 1 | sed 's/#PS //')
if [ -n $SSHPASS ]; then
    export SSHPASS
    sshpass -e $ORIG_SSH $@
else
    $ORIG_SSH $@
fi

Ciò mi consente di specificare la passphrase come #PS <password>nel .ssh/configfile.

Ma, come tutti dicono, è meglio usare ssh-keyscon ssh-agentcui è possibile


0

Il modo corretto di gestire questa situazione è usare un ssh-agent basato sulla sessione. Ecco come:

$ eval `ssh-agent`
$ ssh-add /home/user/.ssh/your_key
Enter passphrase for /home/user/.ssh/your_key:

La password verrà quindi mantenuta valida per il resto della sessione. Devi solo eseguire il primo comando una volta e puoi aggiungere tutte le chiavi che vuoi dopo. Quando la sessione viene interrotta, lo è anche l'agente, quindi non esiste una memoria codificata di una password.

Scioccato che dopo così tanto tempo questa risposta non era qui!


La ragione per cui non c'era probabilmente è che il poster affermava specificamente che non voleva usare la coppia di chiavi pubblica / privata.
Jenny D dice Ripristina Monica il

1
Mi è mancato, grazie. Quindi aggiungo che non usare una coppia di chiavi per SSH è una pessima idea. È più sicuro E più conveniente ... Vorrei esortare l'OP a riconsiderare. L'uso di una coppia di chiavi senza passphrase è molto più sicuro di una coppia di chiavi e di una password. Ma, idealmente, si dovrebbe usare una coppia di chiavi con una passphrase e usare i passaggi che ho fornito se / quando sono in una sessione che richiede l'archiviazione della loro passphrase.
pranalli,

-1

Puoi farlo in modo più sicuro usando sshpass

  1. Imposta la tua password senza cronologia

    export PS = your_password ; storia -d $ (storia 1)

  2. Impostare l'alias host come sopra in ~ / .ssh / config

  3. Utilizzare ssh pass per utilizzare la variabile di ambiente e accedere alla macchina richiesta con un singolo comando

sshpass -p $ PS ssh host_alias

Il tuo ambiente contiene la tua password ed è rischioso che qualsiasi script in esecuzione possa perdere questa password se non sai cosa stai eseguendo


No, non è sicuro. Ed è abbastanza brutto.
7heo.tk,

Quella "soluzione" non è più lunga del problema? Tutti quei passaggi extra e devi ancora digitaresshpass -p $PS ...
Dan H
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.