web-dev-qa-db-fra.com

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

Existe-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ù cela aiderait, j'utilise déjà Pageant et Kitty (une alternative PuTTY).

56
Matt V.

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

Si vous ignorez toute la gestion des paramètres, la gestion 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 doit être équivalente (non testée).

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 l'emplacement automatique des clés, je suis sûr que l'écriture d'un script sous Windows sera beaucoup plus délicate, mais certainement possible.

27
Zoredache

Ces réponses ne m'ont pas aidé. Je n'avais vraiment pas besoin de scripts fous. J'avais créé une clé publique sur ma machine client dans git bash et 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 [email protected] "cat >> ~/.ssh/authorized_keys"user est votre nom d'utilisateur (parfois "root", ou tout ce 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 variation:
cat ~/.ssh/id_rsa.pub | ssh [email protected] "mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys"

20
Augie Gardner

ssh-copy-id fait deux ou trois choses (lisez la 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 clé avec un éditeur de texte et en collant le contenu dans le terminal 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 rechange) et faire quelque chose de similaire à ma suggestion précédente, sans le copier/coller laid.
    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.

16
Kenny Rasschaert

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. Veuillez jeter un œil ici

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

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

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

  • DOS (.cmd) - Succès
  • VBS (.vbs) - Succès
  • Powershell (.ps1) - Succès
  • mremoteNG (ext app) - Succès
    • Sélectionnez Hôte, clic droit, outils externes, sélectionnez Nom du script
  • Script WinSCP (.bat) - Succès
    • # "WinSCP.com" /script=".\Scriptname" /parameter "user[:password]@example.com" "id_rsa.pub" [/log=".\copyssh.log]"
5
Vijay

Si vous n'avez pas ssh-copy-id sous Windows, vous pouvez l'exécuter sur le serveur lui-même.

  • Dans PuTTYgen, chargez votre clé privée (.ppk);
  • Copiez le contenu de la boîte Clé publique à coller dans le fichier OpenSSH authorized_keys dans un presse-papiers.
  • Collez-le dans votre éditeur préféré (le Bloc-notes Windows fera l'affaire).
  • Enregistrez le contenu dans un fichier avec .pub extension.
  • Téléchargez le .pub fichier sur le serveur.
  • Connectez-vous au serveur avec un client SSH, comme PuTTY.
  • Sur le type de serveur:

    ssh-copy-id -i mykey.pub username@localhost
    

Sous Windows ssh-copy-id le script est fourni avec Git pour Windows . Vous pouvez donc l'utiliser localement, si vous avez Git pour Windows.


Si vous ne souhaitez pas le faire manuellement, vous pouvez utiliser WinSCP 5.15. Il peut configurer l'authentification par clé publique pour vous.
Utilisez le bouton Outils> Installer la clé publique sur le serveur sur SSH> Page d'authentification de la boîte de dialogue Paramètres avancés du site WinSCP .

enter image description here

(je suis l'auteur de WinSCP)

5
Martin Prikryl

Dans Windows 7, il y a un ssh.exe

Voici ce qui a fonctionné pour moi:

1. créer une identité (sur 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. copiez le fichier sur le système linux cible en utilisant les crédits ssh vers 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

Remarque: 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 sur linux Le fichier id_rsa.pub sur windows est multiligne où linux l'attend en une seule ligne donc nous devons le corriger un peu. 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. testez-le

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

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

5
Deian

ce que j'ai fait, avoir CygWin sur mon Win10, se connecter à Linux (basé sur la réponse ci-dessus):

- note: en utilisant cat, cela résoudrait automatiquement le chemin cygwin, ainsi que toute commande cygwin utilisant la structure de dossier cygwin-linux

1. added c:\cygwin\bin to the environment's Path variable
2. starting cmd.exe (windows commandline)
3. > ssh-keygen -t rsa   (just pressing enter till done)
4. > cat ~/.ssh/id_rsa.pub | ssh user@server "umask 077; test -d ~/.ssh || mkdir ~/.ssh ; cat >> ~/.ssh/authorized_keys"
5. ..enter server password
6. > ssh user@server (testing, not beeing asked for password)
0
BananaAcid

Si vous utilisez cmder (ou msysgit/mingw qui a scp & ssh), je viens d'écrire un simple script python pour cela. Il peut être trouvé ici: - https://Gist.github.com/ceilfors/fb6908dc8ac96e8fc98

Exemple d'utilisation: python ssh-copy-id.py user @ remote-machine.

Le mot de passe sera demandé lors de l'exécution du script.

0
ceilfors

Version Powershell pour SSH incluse dans Git pour Windows

En fait, cela peut fonctionner tant que vous avez ssh sur votre chemin. Ajoutez les éléments suivants dans votre profil PowerShell:

function ssh-copy-id([string]$userAtMachine){   
    $publicKey = "$ENV:USERPROFILE" + "/.ssh/id_rsa.pub"
    if (!(Test-Path "$publicKey")){
        Write-Error "ERROR: failed to open ID file '$publicKey': No such file"            
    }
    else {
        & cat "$publicKey" | ssh $userAtMachine "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys || exit 1"      
    }
}

Dans une console PowerShell:

ssh-copy-id user@machine
0
Fab

Les étapes suivantes feraient l'affaire:

ÉTAPE 1: Génération d'une paire de clés RSA

C:\Users\user>ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/user//.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/user//.ssh/id_rsa.
Your public key has been saved in /c/Users/user//.ssh/id_rsa.pub.
The key fingerprint is:
20:16:9b:0d:00:92:c4:34:99:51:20:b7:ef:50:c4:0f user@localhost

STE2-2: équivalent ssh-copy-id dans windows

C:\Users\user>ssh user@remote "umask 077; test -d .ssh || mkdir .ssh ; cat >> .s
sh/authorized_keys || exit 1" < "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys
 || exit 1" < C:\Users\user\.ssh\id_rsa.pub
The authenticity of Host 'remote (xx.xx.xxx.xx)' can't be established.
RSA key fingerprint is 99:99:73:74:fe:14:bc:91:c8:3b:ac:f4:95:99:4d:06.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'remote,xx.xx.xxx.xx' (RSA) to the list of known hosts.
*************************************************************************
This computer system is the property of Sample Corporation and is to
be used for business purposes.  All information, messages, software and
hardware created, stored, accessed, received, or used by you through
this system is considered to be the sole property of Sample Corporation
and can and may be monitored, reviewed, and retained at any time.  You
should have no expectation that any such information, messages or
material will be private.  By accessing and using this computer, you
acknowledge and consent to such monitoring and information retrieval.
By accessing and using this computer, you also agree to comply with
all of Sample Company's policies and standards.
*************************************************************************
user@remote's password:[Enter Password for first time]

ÉTAPE-3: L'authentification sans mot de passe fonctionne!

C:\Users\user>ssh user@remote
*************************************************************************
This computer system is the property of Sample Corporation and is to
be used for business purposes.  All information, messages, software and
hardware created, stored, accessed, received, or used by you through
this system is considered to be the sole property of Sample Corporation
and can and may be monitored, reviewed, and retained at any time.  You
should have no expectation that any such information, messages or
material will be private.  By accessing and using this computer, you
acknowledge and consent to such monitoring and information retrieval.
By accessing and using this computer, you also agree to comply with
all of Sample Company's policies and standards.
*************************************************************************
Last login: Wed Oct 14 14:37:13 2015 from localhost
0
GANESH

Il existe une version Windows de ssh-copy-id que j'ai trouvée sur GitHub: https://github.com/zhengyi-yang/ssh-copy-id/tree/master/dist

0
user393933