Gibt es eine Entsprechung zu ssh-copy-id für Windows?

56

Gibt es eine Entsprechung oder einen Port für ssh-copy-id für Windows? Gibt es eine einfache Möglichkeit, unter Windows SSH-Schlüssel von einem lokalen Computer auf einen Remote-Server zu übertragen?

Falls es hilft, verwende ich bereits Pageant und Kitty (eine Putty-Alternative).

Matt V.
quelle

Antworten:

27

ssh-copy-id ist ein ziemlich einfaches Skript, das unter Windows ziemlich einfach zu replizieren sein sollte.

Wenn Sie die gesamte Parameterbehandlung, Fehlerbehandlung usw. ignorieren, sind dies die beiden Befehle von ssh-copy-id, die die meiste Zeit tatsächlich ausgeführt werden.

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

Mit den Kitt-Werkzeugen sollte ein Befehl wie dieser gleichwertig sein (nicht getestet).

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

Wenn Sie die gleiche Fehlerbehandlung und den automatischen Schlüsselspeicherort ausführen möchten, ist das Schreiben eines Skripts unter Windows zwar viel schwieriger, aber durchaus möglich.

Zoredache
quelle
1
Vielen Dank! Zuerst konnte ich es nicht zum Laufen bringen. Ich habe die Fehlermeldung "Zugriff verweigert" zurückbekommen, aber plink hat nicht aufgehört, das Kennwort einzugeben. Ich habe dann versucht, das Passwort mit dem -pw-Schalter zu übergeben, und das hat funktioniert. Wissen Sie, ob es eine Möglichkeit gibt, eine Pause einzulegen, damit Sie das Kennwort auf halbem Weg eingeben können?
Matt V.
Ich bin mir nicht sicher, ob ich ein Passwort für die Authentifizierung und den Verbindungsaufbau verwenden soll. Wann immer ich es tatsächlich benutze, habe ich meinen Schlüssel bereits auf dem System und pagent läuft.
Zoredache
4
plink.exe -pw passwordfunktioniert. Auch wenn Sie wissen, dass .ssh / authorized_keys vorhanden ist, lautet der Befehl einfachtype id_rsa.pub | plink.exe -ssh user@host -pw password "cat >> .ssh/authorized_keys"
KCD
@KCD Es reicht aus, wenn das .ssh/Verzeichnis existiert. Die >>Umleitung erstellt dann die Datei, wenn sie nicht vorhanden ist.
Pabouk
20

Diese Antworten haben mir nicht geholfen. Ich brauchte wirklich keine verrückten Skripte. Ich hatte in Git Bash einen öffentlichen Schlüssel auf meinem Client-Computer erstellt und versuchte, ihn auf einen VPS zu kopieren.

Nach dem Erstellen Ihres öffentlichen Schlüssels sollte der Schlüssel als "(in welchem ​​Ordner auch immer Sie gestartet haben) /. Ssh / id_rsa.pub" gespeichert werden.

Verwenden Sie also diesen Befehl:
cat ~/.ssh/id_rsa.pub | ssh [email protected] "cat >> ~/.ssh/authorized_keys" Wo userist Ihr Benutzername (manchmal "root" oder was auch immer Sie eingerichtet haben), und ersetzen 123.45.67.89Sie ihn durch die IP-Adresse Ihres Rechners / Hosts / VPS.

Wenn das Verzeichnis .sshnoch nicht auf dem Hostcomputer erstellt wurde, verwenden Sie diese kleine Variante:
cat ~/.ssh/id_rsa.pub | ssh [email protected] "mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys"

Augie Gardner
quelle
2
Ich wünschte, ich hätte mehr Stimmen! 👍 für den Einzeiler!
patricktokeeffe
16

ssh-copy-id erledigt einige Dinge (lesen Sie die Manpage für Details), aber das Wichtigste ist, den Inhalt Ihrer lokalen öffentlichen Schlüsseldatei an eine entfernte Datei namens authorized_keys anzuhängen.

  • Sie können dies selbst tun, indem Sie die Schlüsseldatei mit einem Texteditor öffnen und den Inhalt in das Kitty-Terminal einfügen.
    echo 'long_line_with_contents_of_public_key_file' >> .ssh/authorized_keys

  • Alternativ können Sie die Datei mit WinSCP (das sftp oder scp als Fallback verwendet) hochladen und etwas Ähnliches wie meinen vorherigen Vorschlag tun, ohne das hässliche Kopieren / Einfügen.
    cat id_rsa.pub >> .ssh/authorized_keys
    Dabei ist id_rsa.pub der Dateiname des von Ihnen hochgeladenen öffentlichen Schlüssels.

Kenny Rasschaert
quelle
5

Inspiriert von der Antwort von zoredache habe ich eine Reihe von Skripten erstellt, die die Windows-Version sind. Sie hängen jedoch alle von plink ab. Bitte schauen Sie hier

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

Ich habe auch ein Winscp-Skript, das gemäß einer anderen Antwort verwendet werden kann. :) Auszug aus der Liesmich:

Bisher versuchte Methoden:

  • DOS (.cmd) - Erfolg
  • VBS (.vbs) - Erfolg
  • PowerShell (.ps1) - Erfolg
  • mremoteNG (ext app) - Erfolg
    • Wählen Sie Host, klicken Sie mit der rechten Maustaste auf externe Tools und wählen Sie Skriptname
  • WinSCP-Skript (.bat) - Erfolg
    • # "WinSCP.com" /script=".\Scriptname" /parameter "user[:password]@example.com" "id_rsa.pub" [/log=".\copyssh.log]"
Vijay
quelle
1
Diese sind ziemlich süß
Pred
5

In Windows 7 gibt es eine ssh.exe

Folgendes hat bei mir funktioniert:

1. Identität erstellen (unter Windows)

c:\>ssh-keygen

Dadurch wurde eine Identitätsdatei im Ausgangsverzeichnis erstellt. Ich habe den Namen des öffentlichen Schlüssels in "id_rsa" geändert

2. Kopieren Sie die Datei auf das Ziel-Linux-System, und verwenden Sie dabei die SSH- Credits für die Antwort an https://serverfault.com/users/984/zoredache

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

Hinweis: Aus irgendeinem Grund hat die Rohrleitung bei mir nicht funktioniert:

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

3. Korrigieren Sie die Datei unter Linux Die Datei id_rsa.pub unter Windows ist mehrzeilig, wobei Linux sie in einer einzelnen Zeile erwartet, sodass wir sie etwas korrigieren müssen. Melden Sie sich bei Linux an und öffnen Sie die Datei:

vi ~/.ssh/authorized_keys

Zum Beispiel:

---- 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 ----

soll werden

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

4. teste es

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

Dies sollte den Inhalt von / tmp auflisten, ohne nach dem Passwort zu fragen.

Deian
quelle
1
👍 für Schritt 3. Eine Neuformatierung authorized_keysin einzelne Zeilen ist alles, was ich brauche!
patricktokeeffe
Ich bin
5

Wenn Sie ssh-copy-idWindows nicht haben , können Sie es auf dem Server selbst ausführen.

  • Laden Sie in PuTTYgen Ihren privaten Schlüssel (.ppk).
  • Kopieren Sie den Inhalt der Box Öffentlicher Schlüssel zum Einfügen in die OpenSSH-Datei authorized_keys in eine Zwischenablage.
  • Fügen Sie es in Ihren bevorzugten Editor ein (Windows Notepad reicht aus).
  • Speichern Sie den Inhalt in eine Datei mit der .pubErweiterung.
  • Laden Sie die .pubDatei auf den Server hoch.
  • Melden Sie sich mit einem SSH-Client wie PuTTY beim Server an.
  • Auf dem Servertyp:

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

Auf Windows- ssh-copy-idSkript kommt mit Git für Windows . Sie können das also lokal verwenden, wenn Sie Git für Windows haben.


Wenn Sie dies nicht manuell tun möchten, können Sie WinSCP 5.15 verwenden. Es kann die Authentifizierung mit öffentlichem Schlüssel für Sie einrichten.
Verwenden Sie die Schaltfläche Extras> Öffentlichen Schlüssel auf Server installieren auf der Seite SSH> Authentifizierung im Dialogfeld Erweiterte WinSCP-Site-Einstellungen .

Bildbeschreibung hier eingeben

(Ich bin der Autor von WinSCP)

Martin Prikryl
quelle
Dies sollte die akzeptierte Antwort sein: git-bash für Windows 7; Linux-Subsystem in Windows 10 verfügbar
Alex
0

Wenn Sie cmder (oder msysgit / mingw mit scp & ssh) verwenden, habe ich gerade ein einfaches Python-Skript dafür geschrieben. Es kann hier gefunden werden: https://gist.github.com/ceilfors/fb6908dc8ac96e8fc983

Anwendungsbeispiel: python ssh-copy-id.py user @ remote-machine.

Das Passwort wird beim Ausführen des Skripts abgefragt.

Decken
quelle
warum erfordert dies cmder?
David Zorychta
@ user57411 cmder ist nicht erforderlich, scp- und ssh-Befehle sind erforderlich.
Ceilfors
0

Was ich getan habe, CygWin auf meinem Win10 und eine Verbindung zu Linux (basierend auf der obigen Antwort):

- hinweis: mit cat wird der cygwin-pfad automatisch aufgelöst, ebenso wie alle cygwin-befehle mit der cygwin-linux-ordner-struktur

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)
BananaAcid
quelle
0

Diese folgenden Schritte würden tun:

SCHRITT 1: Erstellen Sie ein RSA-Schlüsselpaar

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: ssh-copy-id entspricht in 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]

SCHRITT 3: Passwortlose Authentifizierung funktioniert!

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
GANESH
quelle
0

Powershell-Version für SSH in Git For Windows enthalten

In der Tat kann es so lange funktionieren, wie Sie sshauf Ihrem Weg haben. Fügen Sie Folgendes in Ihr Powershell-Profil ein:

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"      
    }
}

In einer Powershell-Konsole:

ssh-copy-id user@machine
Fab
quelle
ssh-copy-id soll keinen Schlüssel generieren, wenn er nicht existiert.
RalfFriedl
@RalfFriedl Ich habe den Schlüssel entfernt
Fab