Antworten:
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.
plink.exe -pw password
funktioniert. 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"
.ssh/
Verzeichnis existiert. Die >>
Umleitung erstellt dann die Datei, wenn sie nicht vorhanden ist.
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 user@123.45.67.89 "cat >> ~/.ssh/authorized_keys"
Wo user
ist Ihr Benutzername (manchmal "root" oder was auch immer Sie eingerichtet haben), und ersetzen 123.45.67.89
Sie ihn durch die IP-Adresse Ihres Rechners / Hosts / VPS.
Wenn das Verzeichnis .ssh
noch nicht auf dem Hostcomputer erstellt wurde, verwenden Sie diese kleine Variante:
cat ~/.ssh/id_rsa.pub | ssh user@123.45.56.78 "mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys"
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.
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:
usage: .\Scriptname test@example.com password [identity file]
usage: .\Scriptname /i:idtest.pub user@example.com /p:password
usage: .\Scriptname -i idtest.pub user@example.com password
# "WinSCP.com" /script=".\Scriptname" /parameter "user[:password]@example.com" "id_rsa.pub" [/log=".\copyssh.log]"
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.
authorized_keys
in einzelne Zeilen ist alles, was ich brauche!
Wenn Sie ssh-copy-id
Windows nicht haben , können Sie es auf dem Server selbst ausführen.
.pub
Erweiterung..pub
Datei auf den Server hoch.Auf dem Servertyp:
ssh-copy-id -i mykey.pub username@localhost
Auf Windows- ssh-copy-id
Skript 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 .
(Ich bin der Autor von WinSCP)
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.
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)
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
Es gibt eine Windows-Version von ssh-copy-id, die ich auf GitHub gefunden habe: https://github.com/zhengyi-yang/ssh-copy-id/tree/master/dist
In der Tat kann es so lange funktionieren, wie Sie ssh
auf 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