56 votes

Existe-t-il un équivalent de ssh-copy-id pour Windows ?

Y a-t-il un équivalent ou un port de ssh-copy-id disponible pour Windows ? Autrement dit, existe-t-il un moyen simple de transférer des clés SSH d'une machine locale vers un serveur distant sous Windows ?

Au cas où ça aiderait, j'utilise Pageant et Kitty (une alternative à Putty) déjà.

27voto

jammus Points 1796

Ssh-copy-id est un script assez simple qui devrait être assez facile à répliquer sous Windows.

Si vous ignorez la gestion des paramètres, des erreurs, etc., ce sont les deux commandes de ssh-copy-id qui font le travail la plupart du temps.

GET_ID="cat ${ID_FILE}"
{ eval "$GET_ID" ; } | ssh ${1%:} "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys" || exit 1

En utilisant les outils putty, une commande comme celle-ci devrait être équivalente (non testé).

type  public_id | plink.exe username@hostname "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys"

Si vous voulez faire la même gestion des erreurs, et la localisation automatique des touches, je suis sûr que l'écriture d'un script sous Windows sera beaucoup plus délicate, mais certainement possible.

20voto

Augie Gardner Points 301

Ces réponses ne m'ont pas aidé. Je n'avais vraiment pas besoin de scripts délirants. J'avais créé une clé publique sur ma machine cliente dans git bash et j'essayais de la copier sur un VPS.

Après avoir créé votre clé publique, la clé doit être stockée sous "(quel que soit le dossier dans lequel vous avez commencé)/.ssh/id_rsa.pub".

Utilisez donc cette commande :
cat ~/.ssh/id_rsa.pub | ssh user@123.45.67.89 "cat >> ~/.ssh/authorized_keys"user est votre nom d'utilisateur (parfois "root", ou tout autre nom que vous avez configuré), et remplacez 123.45.67.89 avec l'adresse IP de votre machine / hôte / VPS.

Si le répertoire .ssh n'est pas encore créé sur la machine hôte, utilisez cette petite variante :
cat ~/.ssh/id_rsa.pub | ssh user@123.45.56.78 "mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys"

16voto

Kenny Rasschaert Points 8737

Ssh-copy-id fait plusieurs choses (lire l'adresse de l'utilisateur). page de manuel pour plus de détails), mais la chose la plus importante qu'il fait est d'ajouter le contenu de votre fichier de clé publique locale à un fichier distant appelé authorized_keys.

  • Vous pouvez le faire vous-même en ouvrant le fichier de clés avec un éditeur de texte et en collant son contenu dans le terminal de Kitty.
    echo 'long_line_with_contents_of_public_key_file' >> .ssh/authorized_keys

  • Alternativement, vous pouvez télécharger le fichier en utilisant WinSCP (qui utilise sftp, ou scp comme solution de repli) et faire quelque chose de similaire à ma suggestion précédente, sans le copier/coller affreux.
    cat id_rsa.pub >> .ssh/authorized_keys
    où id_rsa.pub est le nom de fichier de la clé publique que vous avez téléchargée.

5voto

Vijay Points 227

Inspiré par la réponse de zoredache, j'ai créé un tas de scripts qui sont la version Windows. Cependant, ils dépendent tous de plink. Jetez un coup d'oeil ici

https://github.com/VijayS1/scripts/blob/master/ssh-copy-id/

J'ai aussi un winscp script qui peut être utilisé selon une autre réponse :) Extrait du readme :

Méthodes tentées jusqu'à présent :

  • DOS(.cmd) - Succès
    • usage: .\Scriptname test@example.com password [identity file]
  • VBS (.vbs) - Succès
    • usage: .\Scriptname /i:idtest.pub user@example.com /p:password
  • Powershell(.ps1) - Succès
    • usage: .\Scriptname -i idtest.pub user@example.com password
  • mremoteNG (ext app) - Succès
    • Sélectionnez l'hôte, cliquez à droite, outils externes, sélectionnez Scriptname.
  • WinSCP script (.bat) - Succès
    • # "WinSCP.com" /script=".\Scriptname" /parameter "user[:password]@example.com" "id_rsa.pub" [/log=".\copyssh.log]"

5voto

Deian Points 151

Sous Windows 7, il existe un fichier ssh.exe.

Voici ce qui a fonctionné pour moi :

1. créer une identité (sous Windows)

c:\>ssh-keygen

Cela a créé un fichier d'identité dans le répertoire personnel. J'ai changé le nom de la clé publique en "id_rsa".

2. copier le fichier sur le système linux cible en utilisant le ssh Crédits à https://serverfault.com/users/984/zoredache pour sa réponse

c:\>ssh user@lnxhost "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys || exit 1" < \\path_to_where_the_file_was_generated_from_ssh_key_gen\id_rsa.pub

Note : Pour une raison quelconque, la tuyauterie n'a pas fonctionné pour moi :

# this should work but it didn't work for me 
type file | ssh user@lnxhost "cat >> /tmp/t.txt"

3. Corriger le fichier sous linux Le fichier id_rsa.pub de Windows est multi-lignes alors que linux s'attend à ce qu'il soit d'une seule ligne. Connectez-vous à linux et ouvrez le fichier :

vi ~/.ssh/authorized_keys

Par exemple :

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "2048-bit RSA, user@winhost"
AAAAB3NzaC1yc2EAAAABIwAAAQEAnvYlVooXGoj3+7huZBUqf4wj57r25SHCKiiShyla33
5flX7Rsmb4meExpdh2NzfzffG15xl1wo0xBZ3HdZdqF2GUniEcNbtVjS1FKzQwPfsYPHMC
Y58qT0U2ZgK1zsXj2o0D2RWrCv3DFFfwUgNyZRYN2HK32umY6OmGSOVuJvIKhT+X6YaCVy
ax3CHv2ByB2OTBl9mh4nrwYAVXToT+X2psBE+MKB5R85lrUGkl3GtymTk10Dvf5O80exdT
LFRMvkCA5RAIZgvxMk/bbNaH/0UHQoctX9oaDeKGWUPfVaknFBQdU9009+lK/ocAlKVNHE
Qkw+1wuV6dFoT1/hngSw==
---- END SSH2 PUBLIC KEY ----

devrait devenir

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAnvYlVooXGoj3+7huZBUqf4wj57r25SHCKiiShyla335flX7Rsmb4meExpdh2NzfzffG15xl1wo0xBZ3HdZdqF2GUniEcNbtVjS1FKzQwPfsYPHMCY58qT0U2ZgK1zsXj2o0D2RWrCv3DFFfwUgNyZRYN2HK32umY6OmGSOVuJvIKhT+X6YaCVyax3CHv2ByB2OTBl9mh4nrwYAVXToT+X2psBE+MKB5R85lrUGkl3GtymTk10Dvf5O80exdTLFRMvkCA5RAIZgvxMk/bbNaH/0UHQoctX9oaDeKGWUPfVaknFBQdU9009+lK/ocAlKVNHEQkw+1wuV6dFoT1/hngSw== user@winhost

4. le tester

c:\>ssh user@lnxhost "ls -al /tmp/"

Cela devrait lister le contenu de /tmp sans demander le mot de passe.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X