Prova questo:
ssh-keyscan -t rsa [ip_address]
Prendi l'output e incollalo in .ssh/known_hosts. Ora, se vuoi eseguire l'hash di known_hosts, fai questo:
ssh-keygen -H
modifica: Ecco l'unica soluzione di comando. Utilizza il nome host e gli indirizzi IP e gli hash entrambi.
ssh-keyscan -Ht rsa [hostname],[IP address] >> known_hosts
La risposta di kschurig funzionerà ma non è necessariamente la più sicura. Ottiene punti bonus per fare il possibile per consentirti di identificare il server con più di un URI, ad esempio nome host e indirizzo IP. Vale a dire che potresti continuare ad aggiungere URI validi di quell'host estendendo l'elenco delimitato da virgole.
Tuttavia, stavo cercando un modo banale per aggirare l'interazione manuale dell'host sconosciuto della clonazione di un repository git come mostrato di seguito e dovrebbe aiutare a spiegare cosa sta succedendo e come puoi evitare questa parte dello scripting di alcune cose relative a SSH:
[email protected]:~$ git clone [email protected]:viperks/viperks-api.git
Cloning into 'viperks-api'...
The authenticity of host 'bitbucket.org (104.192.143.3)' can't be established.
RSA key fingerprint is 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40.
Are you sure you want to continue connecting (yes/no)?
Nota l'impronta digitale della chiave RSA...
Quindi, questa è una cosa SSH, funzionerà per git su SSH e solo per le cose relative a SSH in generale...
[email protected]:~$ nmap bitbucket.org --script ssh-hostkey
Starting Nmap 7.01 ( https://nmap.org ) at 2016-10-05 10:21 EDT
Nmap scan report for bitbucket.org (104.192.143.3)
Host is up (0.032s latency).
Other addresses for bitbucket.org (not scanned): 104.192.143.2 104.192.143.1 2401:1d80:1010::150
Not shown: 997 filtered ports
PORT STATE SERVICE
22/tcp open ssh
| ssh-hostkey:
| 1024 35:ee:d7:b8:ef:d7:79:e2:c6:43:9e:ab:40:6f:50:74 (DSA)
|_ 2048 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40 (RSA)
80/tcp open http
443/tcp open https
Nmap done: 1 IP address (1 host up) scanned in 42.42 seconds
Innanzitutto, installa nmap sul tuo driver giornaliero. nmap è molto utile per alcune cose, come rilevare le porte aperte e questo:verificare manualmente le impronte digitali SSH. Ma torniamo a quello che stiamo facendo.
Bene. O sono compromesso nei molteplici punti e macchine in cui l'ho controllato o la spiegazione più plausibile del fatto che tutto sia hunky dory è ciò che sta accadendo.
Quella "impronta digitale" è solo una stringa accorciata con un algoritmo unidirezionale per la nostra comodità umana, con il rischio che più di una stringa si risolva nella stessa impronta digitale. Succede, si chiamano collisioni.
Indipendentemente da ciò, torniamo alla stringa originale che possiamo vedere nel contesto qui sotto.
[email protected]:~$ ssh-keyscan bitbucket.org
# bitbucket.org SSH-2.0-conker_1.0.257-ce87fba app-128
no hostkey alg
# bitbucket.org SSH-2.0-conker_1.0.257-ce87fba app-129
bitbucket.org ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw==
# bitbucket.org SSH-2.0-conker_1.0.257-ce87fba app-123
no hostkey alg
Quindi, in anticipo, abbiamo un modo per chiedere una forma di identificazione all'host originale.
A questo punto siamo vulnerabili sia manualmente che automaticamente:le stringhe corrispondono, abbiamo i dati di base che creano l'impronta digitale e potremmo richiedere quei dati di base (prevenendo le collisioni) in futuro.
Ora per usare quella stringa in modo da evitare di chiedere informazioni sull'autenticità di un host...
Il file known_hosts in questo caso non utilizza voci di testo in chiaro. Riconoscerai le voci con hash quando le vedi, sembrano hash con caratteri casuali invece di xyz.com o 123.45.67.89.
[email protected]:~$ ssh-keyscan -t rsa -H bitbucket.org
# bitbucket.org SSH-2.0-conker_1.0.257-ce87fba app-128
|1|yr6p7i8doyLhDtrrnWDk7m9QVXk=|LuKNg9gypeDhfRo/AvLTAlxnyQw= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw==
La prima riga di commento appare in modo esasperante, ma puoi sbarazzartene con un semplice reindirizzamento tramite la convenzione ">" o ">>".
Poiché ho fatto del mio meglio per ottenere dati non contaminati da utilizzare per identificare un "host" e fidarsi, aggiungerò questa identificazione al mio file known_hosts nella mia directory ~/.ssh. Poiché ora verrà identificato come un host noto, non riceverò il messaggio sopra menzionato quando eri un giovane.
Grazie per essere rimasto con me, ecco qua. Sto aggiungendo la chiave RSA bitbucket in modo da poter interagire con i miei repository git lì in modo non interattivo come parte di un flusso di lavoro CI, ma qualunque cosa tu faccia quello che vuoi.
#!/bin/bash
cp ~/.ssh/known_hosts ~/.ssh/known_hosts.old && echo "|1|yr6p7i8doyLhDtrrnWDk7m9QVXk=|LuKNg9gypeDhfRo/AvLTAlxnyQw= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw==" >> ~/.ssh/known_hosts
Quindi, è così che rimani vergine per oggi. Puoi fare lo stesso con github seguendo indicazioni simili nel tuo tempo libero.
Ho visto così tanti post di overflow dello stack che ti dicevano di aggiungere la chiave a livello di codice alla cieca senza alcun tipo di controllo. Più controlli la chiave da diverse macchine su reti diverse, maggiore è la fiducia che l'host è quello che dice di essere, e questo è il meglio che puoi sperare da questo livello di sicurezza.
SBAGLIATOssh -oStrictHostKeyChecking=nessun nome host [comando]
SBAGLIATOssh-keyscan -t rsa -H hostname>> ~/.ssh/known_hosts
Non fare nessuna delle cose di cui sopra, per favore. Ti viene data l'opportunità di aumentare le tue possibilità di evitare che qualcuno origlia i tuoi trasferimenti di dati tramite un attacco man in the middle:cogli questa opportunità. La differenza sta letteralmente verificando che la chiave RSA che hai è quella del server in buona fede e ora sai come ottenere quelle informazioni per confrontarle in modo da poterti fidare della connessione. Ricorda solo che più confronti tra computer e reti diversi di solito aumentano la tua capacità di fidarti della connessione.