Ecco cosa ho provato e ho ricevuto un errore:
$ cat /home/tim/.ssh/id_rsa.pub | ssh tim@just.some.other.server 'cat >> .ssh/authorized_keys'
Password:
cat: >>: No such file or directory
cat: .ssh/authorized_keys: No such file or directory
Ecco cosa ho provato e ho ricevuto un errore:
$ cat /home/tim/.ssh/id_rsa.pub | ssh tim@just.some.other.server 'cat >> .ssh/authorized_keys'
Password:
cat: >>: No such file or directory
cat: .ssh/authorized_keys: No such file or directory
Risposte:
OpenSSH è dotato di un comando per fare questo, ssh-copy-id. Basta dargli l'indirizzo remoto e aggiunge la chiave pubblica al authorized_keysfile sul computer remoto:
$ ssh-copy-id tim@just.some.other.server
Potrebbe essere necessario utilizzare la -ibandiera per individuare la chiave pubblica sul tuo computer locale:
$ ssh-copy-id -i ~/.ssh/id_rsa.pub tim@just.some.other.server
>>viene gestito dalla shell e si esegue il comando tramite SSH anziché tramite una shell. La sua correzione per far eseguire a SSH una shell, che esegue il tuo comando, dovrebbe funzionare
ssh-copy-idnon funzionerà, giusto?
Puoi sempre fare qualcosa del genere:
scp ~/.ssh/id_rsa.pub user@remote.example.com:/tmp/id_rsa.pub
ssh user@remote.example.com
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys
Non sono sicuro di poter passare catda una macchina locale a una sessione ssh. Basta spostarlo su / tmp come suggerito.
Modifica: questo è esattamente ciò che ssh-copy-idfa. Proprio come ha detto Michael.
cato in altro modo). Quello che stai descrivendo è alla vecchia maniera; ssh-copy-idè consigliato perché c'è meno rischio di errori di battitura o di dare autorizzazioni errate ai file.
cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> ~/.ssh/authorized_keys'.
Questa risposta descrive come far funzionare il modo previsto mostrato nella domanda.
È possibile eseguire una shell sul computer remoto per interpretare il significato speciale >>dell'operatore di reindirizzamento:
ssh tim@just.some.other.server sh -c "'cat >> .ssh/authorized_keys'" < /home/tim/.ssh/id_rsa.pub
L'operatore di reindirizzamento >>viene normalmente interpretato da una shell.
Quando esegui, ssh host 'command >> file'non è garantito che command >> fileverrà interpretato da una shell. Nel tuo caso command >> fileviene eseguito invece della shell senza una speciale interpretazione ed è >>stato dato al comando come argomento, allo stesso modo dell'esecuzione command '>>' filein una shell.
Alcune versioni di SSH (OpenSSH_5.9) invocano automaticamente la shell sul server remoto e gli passano i comandi quando rilevano i token che devono essere interpretati da una shell come ; > >>ecc.
opensshfornisce ssh-copy-id. La sequenza sarebbe:
Genera una chiave 4K decente
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa4k
Avvia il tuo ssh-agent e succhia informazioni come SSH_AGENT_PID, ecc.
ssh-agent -s > ~/mysshagent
source ~/mysshagent
rm ~/mysshagent
Ora inizia a caricare le chiavi nel tuo agente SSH
ssh-add ~/.ssh/id_rsa4k
Verificare che sia caricato
ssh-add -l
ssh-add -L
Questo ti mostrerà quello che hai nell'agente ssh
Ora in realtà SSH su un sistema remoto
ssh username@remotehost.network
Ora puoi eseguire ssh-copy-id senza argomenti:
ssh-copy-id
Questo crea ~/.ssh/authorized_keyse riempie le informazioni di base richieste da ssh-agent.
Ho avuto problemi con ssh-copy-id quando ho scelto un'altra porta rispetto a 22 ... quindi ecco il mio oneliner con una diversa porta ssh (ad esempio 7572):
ssh yourServer.dom -p7572 "mkdir .ssh; chmod 700 .ssh; umask 177; sh -c 'cat >> .ssh/authorized_keys'" < .ssh/id_rsa.pub
Infatti il the ssh-copy-idcomando fa esattamente questo (dal openssh-clientpacchetto):
ssh-copy-id user@host
Nota: hostsignifica indirizzo IP o dominio .
Vorrei anche aggiungere alcune informazioni aggiuntive a questo
1) Possiamo specificare una porta diversa per SSH sul server di destinazione:
ssh-copy-id "-p 8127 user@host"
Nota:
la porta deve trovarsi davanti user@hosto non si risolverà.
2) Possiamo specificare un file con una chiave pubblica :
ssh-copy-id -i ~/.ssh/id_rsa.pub user@host
Nota:
l' -iopzione ci consente di indicare la posizione appropriata del nome con il file che contiene la chiave pubblica.
A volte può tornare utile, soprattutto se lo memorizziamo in una posizione non standard o abbiamo più di una chiave pubblica sul nostro computer e vogliamo indicarne una specifica.