Voglio essere in grado di accedere a un telecomando tramite ssh senza dover inserire la password in ogni momento.
- Come lo installo?
- È necessario un comando diverso per eseguire una sessione senza password?
Voglio essere in grado di accedere a un telecomando tramite ssh senza dover inserire la password in ogni momento.
Risposte:
Eseguire questi comandi:
ssh-keygen
Quindi dovrai copiare la nuova chiave sul tuo server :
ssh-copy-id user@host
## or if your server uses custom port no:
ssh-copy-id "user@host -p 1234"
Dopo che la chiave è stata copiata, ssh nella macchina normalmente:
ssh user@host
Ora puoi accedere senza inserire una password dal particolare computer sul quale hai eseguito i comandi.
not-marco@rinzwind-desktop:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/not-marco/.ssh/id_rsa):
Created directory '/home/not-marco/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/not-marco/.ssh/id_rsa.
Your public key has been saved in /home/not-marco/.ssh/id_rsa.pub.
The key fingerprint is:
b1:25:04:21:1a:38:73:38:3c:e9:e4:5b:81:e9:ac:0f not-marco@rinzwind-desktop
The key's randomart image is:
+--[ RSA 2048]----+
|.o= . oo. |
|*B.+ . . |
|*=o . o . |
| = . = |
|. o S |
|E. |
| o |
| . |
| |
+-----------------+
not-marco@rinzwind-desktop:~$ ssh-copy-id not-marco@server
not-marco@server's password:
Now try logging into the machine, with "ssh 'not-marco@server'", and check in:
~/.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
Ciò presuppone che sia già possibile connettersi correttamente al server tramite SSH.
Dovrai generare un SSH Keypair che ti permetterà di identificarti come te stesso senza usare una password. Se lo desideri, puoi scegliere di proteggere le chiavi con un passcode, ma questo può essere lasciato in bianco consentendo l'accesso SSH totalmente senza password.
ssh-keygen
questo creerà un id_rsa
e id_rsa.pub
file. Il pub
file è ciò che va sui server, la chiave privata ( id_rsa
) è ciò che resta con te ed è come ti identifichi.ssh-copy-id user@server
sostituendo l'utente con il tuo utente remoto e il server con il nome DNS o l'indirizzo IP della macchina. Ti verrà richiesta la tua password SSH, inseriscila e se tutto viene completato correttamente sarai in grado di accedere alla macchina ssh user@server
senza bisogno di una password.ssh-keygen
seguire le istruzioni sullo schermo, quindi digitare la ssh-copy-id user@server
sostituzione dell'utente con l'utente remoto e il server con la macchina remota
ssh-copy-id "not-marco@127.0.0.1 -p 1234"
.
Il modo in cui lo faccio di solito è il seguente:
ssh-keygen -t rsa
(Quando viene richiesta una password, lasciarla vuota)
Poi:
cat ~/.ssh/id_rsa.pub | ssh username@hostname 'cat >> .ssh/authorized_keys'
(Ciò richiede che la cartella .ssh sia nella directory home sul nome host di destinazione, con il file authorized_keys al suo interno)
Naturalmente, sostituisci il nome utente con il nome utente desiderato e il nome host con il nome host o l'indirizzo IP desiderati
Dopodiché, basta SSH per quella scatola proprio come sei abituato.
touch
e chmod
nella risposta di Rinzwind?
.ssh/authorized_keys
file su 0600 o questo non funzionerà
Normalmente lo uso sshpass
per quello, lo installo con sudo apt-get install sshpass
e lo uso in questo modo
sshpass -p 'password' ssh your_username@your_server
sshpass
è un trucco molto utile nei casi in cui non è possibile modificare il metodo di autenticazione sul server remoto!
Disabilita autenticazione password
Poiché molte persone con server SSH usano password deboli, molti aggressori online cercheranno un server SSH, quindi inizieranno a indovinare le password a caso. Un utente malintenzionato può provare migliaia di password in un'ora e indovinare anche la password più sicura, con il tempo sufficiente. La soluzione consigliata è utilizzare le chiavi SSH anziché le password. Per essere difficile da indovinare come una normale chiave SSH, una password dovrebbe contenere 634 lettere e numeri casuali. Se sarai sempre in grado di accedere al tuo computer con una chiave SSH, dovresti disabilitare completamente l'autenticazione della password.
Se si disabilita l'autenticazione con password, sarà possibile connettersi solo da computer specificamente approvati. Ciò migliora enormemente la tua sicurezza, ma ti rende impossibile connetterti al tuo computer dal PC di un amico senza pre-approvare il PC o dal tuo laptop quando elimini accidentalmente la tua chiave.
Si consiglia di disabilitare l'autenticazione della password a meno che non si abbia un motivo specifico per non farlo.
Per disabilitare l'autenticazione con password, cerca la seguente riga nel tuo file sshd_config:
#PasswordAuthentication yes
sostituirlo con una linea simile a questa:
PasswordAuthentication no
Dopo aver salvato il file e riavviato il server SSH, non dovresti nemmeno chiedere una password quando accedi.
https://help.ubuntu.com/community/SSH/OpenSSH/Configuring#disable-password-authentication
PasswordAuthentication no
tutti gli utenti? In caso contrario, come posso disattivarlo per gli utenti normali ma lasciarlo invariato per il root mentre lo collaudo? Non voglio davvero farselo e rinchiudermi completamente.
Permission denied (publickey).
con PasswordAuthentication no
. Cosa devo fare? Cambio PasswordAuthentication no
su un altro host?
Questa soluzione è appositamente per gli utenti che utilizzano di Windows per ssh nelle loro macchine a distanza, incluse le immagini nube su AWS cloud e GCE cloud
Recentemente ha utilizzato questa soluzione per accedere in remoto nuove immagini vm distribuite su GCE.
puttygen
download di puttygenwinscp
download di winscpSe possiedi una chiave privata:
Apri puttygen
, premi il pulsante di caricamento e seleziona il *.pem
file della chiave privata ( ).
Se non si possiede una chiave privata:
puttygen
,(dalla fonte 1, link indicato di seguito)
notepad
)Copia i dati della tua chiave pubblica dalla sezione "Chiave pubblica per incollarli nel file OpenSSH authorized_keys" del generatore di chiavi PuTTY e incolla i dati della chiave nel authorized_keys
file.
Assicurati che ci sia solo una riga di testo in questo file.
Carica il file authorized_keys nella directory home sul computer remoto.
Crea .ssh
directory (se non esistente)
Copia il authorized_keys
file nella .ssh
directory.
(questo sostituirà qualsiasi authorized_keys
file esistente , prendine nota).
Se il file esiste, aggiungi semplicemente il contenuto di questo file al file esistente.
Esegui i comandi per impostare le autorizzazioni:
sudo chmod 700 .ssh && chmod 600 .ssh/authorized_keys
Ora sarai in grado di accedere alla ssh
macchina remota senza inserire le credenziali ogni volta.
Se si crea una coppia di chiavi pubblica / prata e si accede utilizzando la nostra chiave pubblica appena creata, non sarà necessario digitare la password. A seconda della configurazione del portachiavi e / o dell'agente ssh potrebbe essere necessario proteggere la chiave con una passphrase.
Ecco uno dei tanti brevi tutorial per te. È di fondamentale importanza per la sicurezza di questo metodo, che la chiave privata generata rimanga privata! Non dovresti mai condividerlo con nessuno o consentirne l'accesso a qualsiasi titolo.
Questo comando genera una chiave ragionevolmente forte in ~/.ssh/
:
ssh-keygen -b 4096
In ~/.ssh/
troverai la tua chiave pubblica come id_rsa.pub
. Il contenuto deve essere aggiunto al authorized_keys
file del server trasportando tramite un supporto trasportabile (pen drive) o abilitando a breve l'autenticazione della password sul server, quindi utilizzandolo ssh-copy-id ~/.ssh/id_rsa.pub username@server
e quindi disabilitandolo nuovamente.
Se hai scelto di proteggere la tua chiave con una passphrase (nel primo passaggio), puoi utilizzare ssh-agent
o il portachiavi Ubuntu per proteggere quel pharse localmente in modo da non doverlo digitare sempre.
Per fare alcune aggiunte:
Il Mac per impostazione predefinita non ha ssh-copy-id
, dovrai installarlo tu stesso:
curl https://raw.github.com/beautifulcode/ssh-copy-id-for-OSX/master/ssh-copy-id.sh -o /usr/local/bin/ssh-copy-id
chmod +x /usr/local/bin/ssh-copy-id
Scopri di più qui: https://github.com/beautifulcode/ssh-copy-id-for-OSX
se hai effettuato un port forwarding, il comando dovrebbe essere così:
ssh-copy-id "not-marco@127.0.0.1 -p 2222"
si noti che le virgolette sono necessarie.
Le applicazioni ssh
e scp
per l'accesso remoto e la copia remota, rispettivamente, consentono di comunicare con un host remoto senza fornire una password. Ciò richiede che tu segua una procedura di autenticazione come quella descritta di seguito. Per client intendiamo la macchina su cui ci si trova e per server intendiamo la macchina a cui si desidera accedere senza fornire una password. I passaggi della procedura di autenticazione sono:
$HOME/.ssh
.$HOME/.ssh/authorized_keys
o $HOME/.ssh/authorized_keys2
sul server.Esistono tre diversi tipi di protocolli di autenticazione. Si specifica il tipo quando si esegue ssh-keygen:
chmod 0700
garantire che questo file non sia leggibile per gli altri) e identity.pub (chiave pubblica).ssh-keygen -t rsa
e genera file id_rsa
(chiave privata) e id_rsa.pub
(chiave pubblica)ssh-keygen -t dsa
e genera file id_dsa
(chiave privata) e id_dsa.pub
(chiave pubblica)Quando esegui ssh-keygen puoi fare affidamento sulle risposte predefinite (sottintendendo che non dai una passphrase). Questo rende l'intero set-up semplice, ma anche insicuro.
È possibile specificare il tipo di chiavi da utilizzare con un'opzione per ssh ; ssh -1
forza l'uso delle chiavi RSA1 (protocollo versione 1), mentre ssh -2
forza ssh a provare solo le chiavi RSA o DSA (protocollo versione 2). Negli esempi seguenti, generiamo e installiamo le chiavi RSA1 e DSA sull'host remoto in modo da avere maggiore flessibilità. Puoi creare un file di configurazione nella tua .ssh
directory con la linea
Protocol 1,2
Questo fa ssh provare una connessione RSA1 (protocollo versione 1) prima di RSA / DSA (protocollo versione 2).
remote=user@remotehost # fill in correct user and remotehost names
cd $HOME/.ssh
# create .ssh on remote host if it is non-existing:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi'
# copy RSA1 key:
scp identity.pub ${remote}:.ssh
ssh $remote "cd .ssh; cat identity.pub >> authorized_keys"
remote=user@remotehost # fill in correct user and remotehost names
cd $HOME/.ssh
# create .ssh on remote host if it is non-existing:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi'
# copy DSA key:
scp id_dsa.pub ${remote}:.ssh
ssh $remote "cd .ssh; cat id_dsa.pub >> authorized_keys2"
Questo è tutto ciò che devi fare se non hai usato una passphrase durante la generazione delle chiavi. È possibile verificare la connessione eseguendo ssh $ remote e vedere se è possibile accedere senza fornire una password (potrebbe essere necessario utilizzare -1
o -2
come opzioni per ssh ). La procedura può, ovviamente, essere ripetuta per qualsiasi macchina su cui si desidera accedere.
Se hai usato una passphrase, dovrai avviare il programma ssh-agent
per avviare una shell speciale, seguita da ssh-add
per registrare la tua combinazione chiave / passphrasesshd
. Vedi le pagine man di questi programmi per maggiori informazioni.
ssh-no-password.sh
#!/bin/sh
# create ssh connections without giving a password
if [ $# -lt 1 ]; then
echo Usage: $0 username@remotehost
exit
fi
remote="$1" # 1st command-line argument is the user@remotehost address
this=$HOST # name of client host
# first check if we need to run ssh-keygen for generating
# $HOME/.ssh with public and private keys:
if [ ! -d $HOME/.ssh ]; then
echo "just type RETURN for each question:" # no passphrase - unsecure!!
# generate RSA1, RSA and DSA keys:
echo; echo; echo
ssh-keygen
echo; echo; echo
ssh-keygen -t rsa
echo; echo; echo
ssh-keygen -t dsa
else
# we have $HOME/.ssh, but check that we have all types of
# keys (RSA1, RSA, DSA):
if [ ! -f $HOME/.ssh/identity ]; then
# generate RSA1 keys:
echo "just type RETURN for each question:" # no passphrase - unsecure!!
ssh-keygen
fi
if [ ! -f $HOME/.ssh/id_rsa ]; then
# generate RSA keys:
echo "just type RETURN for each question:" # no passphrase - unsecure!!
ssh-keygen -t rsa
fi
if [ ! -f $HOME/.ssh/id_rsa ]; then
# generate DSA keys:
echo "just type RETURN for each question:" # no passphrase - unsecure!!
ssh-keygen -t dsa
fi
fi
cd $HOME/.ssh
if [ ! -f config ]; then
# make ssh try ssh -1 (RSA1 keys) first and then ssh -2 (DSA keys)
echo "Protocol 1,2" > config
fi
# copy public keys (all three types) to the destination host:
echo; echo; echo
# create .ssh on remote host if it's not there:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi'
# copy RSA1 key:
scp identity.pub ${remote}:.ssh/${this}_rsa1.pub
# copy RSA key:
#scp id_rsa.pub ${remote}:.ssh/${this}_rsa.pub
# copy DSA key:
scp id_dsa.pub ${remote}:.ssh/${this}_dsa.pub
# make authorized_keys(2) files on remote host:
echo; echo; echo
# this one copies all three keys:
#ssh $remote "cd .ssh; touch authorized_keys authorized_keys2; cat ${this}_rsa1.pub >> authorized_keys; cat ${this}_rsa.pub >> authorized_keys2; cat ${this}_dsa.pub >> authorized_keys2;"
# this one copies RSA1 and DSA keys:
ssh $remote "cd .ssh; touch authorized_keys authorized_keys2; cat ${this}_rsa1.pub >> authorized_keys; cat ${this}_dsa.pub >> authorized_keys2;"
echo; echo; echo
echo "try an ssh $remote"
copiato da: http://folk.uio.no/hpl/scripting/doc/ssh-no-password.html
Vorrei aggiungere una risposta per coloro che potrebbero trovare che devono inserire la password anche se hanno letto tutte le risposte qui perché hai impostato IdentitàSolo come sì. E la risposta qui può farti risparmiare molto tempo per gestire più chiavi, essendo chiavi per git o server.
Dopo aver generato la chiave e copiata sul server:
ssh-keygen # change the file to /home/yourname/.ssh/something
ssh-copy-id -i ~/.ssh/something.pub lerner@192.168.20.160
Ho scoperto che non ha funzionato.
Poi sono andato a controllare il ~/.ssh/config
file sul client, ho visto questo in fondo:
Host *
IdentitiesOnly yes
Quindi aggiungo questo sopra:
Host somename
HostName 192.168.20.160
User lerner
IdentityFile ~/.ssh/something
Posso semplicemente accedere inserendo ssh somename
.
Quindi puoi aggiungere più chiavi SSH usando i tuoi nomi preferiti e devi solo aggiungere le impostazioni come le quattro righe sopra al file di configurazione.
Host è il nome che desideri inserire quando ti connetti al server in un secondo momento; HostName è l'ip del server; Utente è il nome utente che accedi al server; e il file di identità è il file in cui è memorizzata la chiave generata.