Voici ce que j'ai essayé et j'ai eu une erreur:
$ 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
Voici ce que j'ai essayé et j'ai eu une erreur:
$ 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
Réponses:
OpenSSH est livré avec une commande pour ce faire, ssh-copy-id
. Vous lui donnez simplement l'adresse distante et il ajoute votre clé publique au authorized_keys
fichier sur la machine distante:
$ ssh-copy-id tim@just.some.other.server
Vous devrez peut-être utiliser l' -i
indicateur pour localiser votre clé publique sur votre ordinateur local:
$ ssh-copy-id -i ~/.ssh/id_rsa.pub tim@just.some.other.server
>>
est géré par votre shell, et vous exécutez la commande via SSH au lieu de passer par un shell. Son correctif d'avoir SSH exécutant un shell, qui exécute ensuite votre commande, devrait fonctionner
ssh-copy-id
ne fonctionnera pas, non?
Vous pouvez toujours faire quelque chose comme ça:
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
Je ne sais pas si vous pouvez cat
partir d'une machine locale dans une session ssh. Déplacez-le simplement dans / tmp comme suggéré.
Edit: c'est exactement ce qui ssh-copy-id
fait. Comme Michael l'a dit.
cat
ou autrement). Ce que vous décrivez est à l'ancienne; ssh-copy-id
est recommandé car il y a moins de risques de fautes de frappe ou de donner aux fichiers de mauvaises autorisations.
cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> ~/.ssh/authorized_keys'
.
Cette réponse décrit comment faire fonctionner la manière voulue indiquée dans la question.
Vous pouvez exécuter un shell sur l'ordinateur distant pour interpréter la signification particulière de l' >>
opérateur de redirection:
ssh tim@just.some.other.server sh -c "'cat >> .ssh/authorized_keys'" < /home/tim/.ssh/id_rsa.pub
L'opérateur de redirection >>
est normalement interprété par un shell.
Lorsque vous exécutez, ssh host 'command >> file'
il n'est pas garanti que ce command >> file
sera interprété par un shell. Dans votre cas, il command >> file
est exécuté à la place du shell sans interprétation spéciale et a >>
été donné à la commande comme argument - de la même manière que l'exécution command '>>' file
dans un shell.
Certaines versions de SSH (OpenSSH_5.9) invoqueront automatiquement le shell sur le serveur distant et lui passeront la ou les commandes lorsqu'ils détecteront des jetons à interpréter par un shell comme ;
>
>>
etc.
openssh
ne fournit ssh-copy-id
. La séquence serait:
Générez une clé 4k décente
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa4k
Démarrez votre agent ssh et aspirez des informations comme SSH_AGENT_PID
, etc.
ssh-agent -s > ~/mysshagent
source ~/mysshagent
rm ~/mysshagent
Maintenant, commencez à charger des clés dans votre agent SSH
ssh-add ~/.ssh/id_rsa4k
Vérifiez qu'il est chargé
ssh-add -l
ssh-add -L
Cela vous montrera ce que vous avez dans l'agent ssh
Désormais SSH vers un système distant
ssh username@remotehost.network
Vous pouvez maintenant exécuter ssh-copy-id sans arguments:
ssh-copy-id
Cela crée ~/.ssh/authorized_keys
et remplit les informations de base requises de ssh-agent.
J'ai eu des problèmes avec ssh-copy-id lors du choix d'un autre port que 22 ... alors voici mon oneliner avec un port ssh différent (par exemple 7572):
ssh yourServer.dom -p7572 "mkdir .ssh; chmod 700 .ssh; umask 177; sh -c 'cat >> .ssh/authorized_keys'" < .ssh/id_rsa.pub
En effet, la the ssh-copy-id
commande fait exactement cela (à partir du openssh-client
package):
ssh-copy-id user@host
Remarque: host
signifie adresse IP ou domaine .
Je voudrais également ajouter quelques informations supplémentaires à ce
1) Nous pouvons spécifier un port différent pour SSH sur le serveur de destination:
ssh-copy-id "-p 8127 user@host"
Remarque:
le port doit être en face du user@host
ou il ne se résoudra pas.
2) On peut spécifier un fichier avec une clé publique :
ssh-copy-id -i ~/.ssh/id_rsa.pub user@host
Remarque:
L' -i
option nous permet d'indiquer l'emplacement approprié du nom avec le fichier qui contient la clé publique.
Parfois, cela peut être utile, surtout si nous le stockons dans un emplacement non standard ou si nous avons plusieurs clés publiques sur notre ordinateur et que nous voulons en indiquer une spécifique.