ssh: accetta automaticamente le chiavi

170

Ho scritto questo piccolo script di utilità:

for h in $SERVER_LIST; do ssh $h "uptime"; done

Quando un nuovo server viene aggiunto a $SERVER_LIST , lo script viene arrestato con:

The authenticity of host 'blah.blah.blah (10.10.10.10)' can't be established.
RSA key fingerprint is a4:d9:a4:d9:a4:d9a4:d9:a4:d9a4:d9a4:d9a4:d9a4:d9a4:d9.
Are you sure you want to continue connecting (yes/no)?

Ho provato yes :

for h in $SERVER_LIST; do yes | ssh $h "uptime"; done

senza fortuna.

C'è un modo per parametrizzare ssh per accettare automaticamente qualsiasi nuova chiave?

    
posta Adam Matan 18.04.2012 - 11:11
fonte

4 risposte

182

Utilizza l'opzione StrictHostKeyChecking, ad esempio:

ssh -oStrictHostKeyChecking=no $h uptime

Questa opzione può anche essere aggiunta a ~ / .ssh / config, ad esempio:

Host somehost
    Hostname 10.0.0.1
    StrictHostKeyChecking no

Nota che quando le chiavi dell'host sono cambiate, riceverai un avvertimento, anche con questa opzione:

$ ssh -oStrictHostKeyChecking=no somehost uptime
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
31:6f:2a:d5:76:c3:1e:74:f7:73:2f:96:16:12:e0:d8.
Please contact your system administrator.
Add correct host key in /home/peter/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/peter/.ssh/known_hosts:24
  remove with: ssh-keygen -f "/home/peter/.ssh/known_hosts" -R 10.0.0.1
Password authentication is disabled to avoid man-in-the-middle attacks.
Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks.
ash: uptime: not found

Se i tuoi host non vengono spesso reinstallati, potresti renderlo meno sicuro (ma più conveniente per le chiavi host che cambiano spesso) con l'opzione -oUserKnownHostsFile=/dev/null . Questo elimina tutte le chiavi host ricevute, quindi non genererà mai l'avviso.

Con la 18.04, c'è una nuova possibilità: StrictHostKeyChecking=accept-new . Da man 5 ssh_config :

If this flag is set to “accept-new” then ssh will automatically
add new host keys to the user known hosts files, but will not
permit connections to hosts with changed host keys.  If this flag
is set to “no” or “off”, ssh will automatically add new host keys
to the user known hosts files and allow connections to hosts with
changed hostkeys to proceed, subject to some restrictions.
    
risposta data Lekensteyn 18.04.2012 - 11:29
fonte
96

Puoi usare il seguente comando per aggiungere l'impronta digitale per un server ai tuoi known_hosts

ssh-keyscan -H <ip-address> >> ~/.ssh/known_hosts
ssh-keyscan -H <hostname> >> ~/.ssh/known_hosts

NOTA: Sostituisci & lt; indirizzo IP & gt; e & lt; nomehost & gt; con il nome IP e DNS del server che si desidera aggiungere.

L'unico problema con questo è che ti ritroverai con alcuni server nei tuoi known_hosts due volte. Non è davvero un grosso problema, solo menzionando. Per garantire che non vi siano duplicati, è possibile rimuovere prima tutti i server eseguendo prima quanto segue:

ssh-keygen -R <ip-address>
ssh-keygen -R <hostname>

Quindi potresti eseguire:

for h in $SERVER_LIST; do
    ip=$(dig +search +short $h)
    ssh-keygen -R $h
    ssh-keygen -R $ip
    ssh-keyscan -H $ip >> ~/.ssh/known_hosts
    ssh-keyscan -H $h >> ~/.ssh/known_hosts
done

Una cosa da tenere a mente quando si rimuove solo per aggiungere nuovamente, si sta essenzialmente rimuovendo la sicurezza della verifica dell'impronta digitale. Quindi non vorresti assolutamente eseguire questo script prima di ogni esecuzione del tuo script di utilità.

    
risposta data mhost 17.10.2013 - 02:24
fonte
23

Sono un po 'in ritardo con questa risposta, ma il modo sensato sarebbe di fare un ssh-keyscan sulla nuova macchina prima di eseguire la raccolta di uptime.

ssh-keyscan  <newhost> >> ~/.ssh/known_hosts

Disattivare il controllo di integrità per motivi di praticità suona come un cattivo piano, anche se pensi di avere il pieno controllo dell'ambiente.

    
risposta data tink 24.11.2014 - 20:47
fonte
0

Per aggiungere automaticamente un elenco di server possiamo fare sotto:

Aggiungi server IP in file server-list

Gli IP dovrebbero essere aggiunti sotto il formato.

Output di cat servers-list

123.1.2.3
124.1.2.4
123.1.2.5

Cambia sopra gli IP sostituendo il tuo.

Sotto il comando si aggiungeranno tutti i server dall'elenco.

ssh-keyscan -p61 -H "'cat servers-list'" >> ~/.ssh/known_hosts
    
risposta data Waqas Khan 16.02.2018 - 08:46
fonte

Leggi altre domande sui tag