Esiste un equivalente a ssh-copy-id per Windows?


56

Esistono equivalenti o porte di ssh-copy-id disponibili per Windows? Cioè, esiste un modo semplice per trasferire le chiavi SSH da un computer locale a un server remoto in Windows?

Nel caso in cui aiuti, sto già utilizzando Pageant e Kitty (un'alternativa di Putty).

Risposte:


27

ssh-copy-id è uno script abbastanza semplice che dovrebbe essere abbastanza facile da replicare sotto Windows.

Se si ignora tutta la gestione dei parametri, la gestione degli errori e così via, questi sono i due comandi di ssh-copy-id che stanno effettivamente facendo il lavoro per la maggior parte del tempo.

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

Usando gli strumenti putty un comando come questo dovrebbe essere equivalente (non testato).

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

Se vuoi fare la stessa gestione degli errori e la posizione automatica della chiave, sono sicuro che scrivere uno script sotto Windows sarà molto più complicato, ma sicuramente possibile.


1
Grazie! All'inizio non riuscivo a farlo funzionare; Stavo ottenendo errori di "accesso negato", ma il plink non si fermava per farmi inserire la password. Ho quindi provato a passare a plink la password usando l'opzione -pw e ha funzionato. Sai se esiste un modo per mettere in pausa il plink e inserire la password a metà strada?
Matt V.

Non sono davvero sicuro dell'autenticazione e del plink della password. Ogni volta che lo uso in realtà ho già la mia chiave sul sistema e ho il funzionamento in esecuzione.
Zoredache,

4
plink.exe -pw passwordlavori. Anche se conosci .ssh / authorized_keys esiste il comando è semplicementetype id_rsa.pub | plink.exe -ssh user@host -pw password "cat >> .ssh/authorized_keys"
KCD

@KCD È sufficiente se la .ssh/directory esiste. Il >>reindirizzamento creerà quindi il file se non esiste.
pabouk,

20

Queste risposte non mi hanno aiutato. Non avevo davvero bisogno di script pazzi. Avevo creato una chiave pubblica sul mio computer client in git bash e stavo provando a copiarla su un VPS.

Dopo aver creato la chiave pubblica, la chiave deve essere memorizzata come "(qualunque cartella tu abbia avviato) /. Ssh / id_rsa.pub"

Quindi usa questo comando:
cat ~/.ssh/id_rsa.pub | ssh user@123.45.67.89 "cat >> ~/.ssh/authorized_keys" dov'è il usertuo nome utente (a volte "root", o qualunque cosa tu abbia impostato), e sostituiscilo 123.45.67.89con il tuo indirizzo IP macchina / host / VPS.

Se la directory .sshnon è ancora stata creata sul computer host, utilizzare questa piccola variazione:
cat ~/.ssh/id_rsa.pub | ssh user@123.45.56.78 "mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys"


2
Vorrei avere più voti! 👍 per il one-liner!
patricktokeeffe,

16

ssh-copy-id fa un paio di cose (leggi la pagina man per i dettagli), ma la cosa più importante che fa è aggiungere il contenuto del tuo file di chiave pubblica locale a un file remoto chiamato authorized_keys.

  • Puoi farlo tu stesso aprendo il file chiave con un editor di testo e incollando il contenuto nel terminale Kitty.
    echo 'long_line_with_contents_of_public_key_file' >> .ssh/authorized_keys

  • In alternativa, è possibile caricare il file utilizzando WinSCP (che utilizza sftp o scp come fallback) e fare qualcosa di simile al mio precedente suggerimento, senza la brutta copia / incolla.
    cat id_rsa.pub >> .ssh/authorized_keys
    dove id_rsa.pub è il nome file della chiave pubblica che hai caricato.


5

Ispirato dalla risposta di zoredache, ho creato un sacco di script che sono la versione di Windows. Comunque dipendono tutti dal plink. Per favore dai un'occhiata qui

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

Ho anche uno script winscp che può essere usato come per un'altra risposta. :) Estratto dal readme:

Finora tentati metodi:

  • DOS (.cmd) - Successo
    • usage: .\Scriptname test@example.com password [identity file]
  • VBS (.vbs) - Successo
    • usage: .\Scriptname /i:idtest.pub user@example.com /p:password
  • Powershell (.ps1) - Successo
    • usage: .\Scriptname -i idtest.pub user@example.com password
  • mremoteNG (ext app) - Successo
    • Seleziona Host, tasto destro, strumenti esterni, seleziona Nome script
  • Script WinSCP (.bat) - Operazione riuscita
    • # "WinSCP.com" /script=".\Scriptname" /parameter "user[:password]@example.com" "id_rsa.pub" [/log=".\copyssh.log]"

1
Questi sono piuttosto dolci
Pred

5

In Windows 7 è presente un file ssh.exe

Ecco cosa ha funzionato per me:

1. crea identità (su windows)

c:\>ssh-keygen

Che ha creato un file di identità nella home directory. Ho cambiato il nome della chiave pubblica in "id_rsa"

2. copia il file sul sistema linux di destinazione usando i crediti ssh su https://serverfault.com/users/984/zoredache per la sua risposta

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

Nota: per qualche motivo le tubazioni non hanno funzionato per me:

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

3. Correggi il file su linux Il file id_rsa.pub su windows è multilinea dove linux lo aspetta in una sola riga, quindi dobbiamo correggerlo un po '. Accedi a Linux e apri il file:

vi ~/.ssh/authorized_keys

Per esempio:

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

dovrebbe diventare

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

4. testalo

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

Questo dovrebbe elencare il contenuto di / tmp senza chiedere la password.


1
👍 per il passaggio 3. La riformattazione authorized_keyssu linee singole è tutto ciò di cui avevo bisogno!
patricktokeeffe,

felice che ti abbia aiutato - vota la risposta :)
Deian,

5

Se non lo hai ssh-copy-idsu Windows, puoi eseguirlo sul server stesso.

  • In PuTTYgen, carica la tua chiave privata (.ppk);
  • Copia il contenuto della casella Chiave pubblica per incollarlo nel file OpenSSH authorized_keys negli Appunti.
  • Incollalo nel tuo editor preferito (Windows Notepad lo farà).
  • Salvare il contenuto in un file con .pubestensione.
  • Carica il .pubfile sul server.
  • Accedi al server con un client SSH, come PuTTY.
  • Sul server digitare:

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

Su Windows ssh-copy-idscript viene fornito con Git per Windows . Quindi puoi usarlo localmente, se hai Git per Windows.


Se non si desidera eseguire questa operazione manualmente, è possibile utilizzare WinSCP 5.15. Può configurare l'autenticazione con chiave pubblica per te.
Utilizzare Strumenti> Installa chiave pubblica nel pulsante Server su SSH> Pagina di autenticazione della finestra di dialogo Impostazioni avanzate del sito WinSCP .

inserisci qui la descrizione dell'immagine

(Sono l'autore di WinSCP)


Questa dovrebbe essere la risposta accettata: git-bash per Windows 7; Sottosistema Linux disponibile in Windows 10
Alex


0

cosa ho fatto, avendo CygWin sul mio Win10, collegandomi a Linux (basato sulla risposta di aboves):

- nota: usando cat, risolverebbe automaticamente il percorso cygwin, così come qualsiasi comando cygwin usando la struttura delle cartelle 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

Le seguenti operazioni farebbero:

PASSAGGIO 1: Genera coppia di chiavi 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: ssh-copy-id equivalente 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]

PASSAGGIO 3: l'autenticazione senza password funziona!

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

Versione Powershell per SSH inclusa in Git per Windows

In effetti, può funzionare tutto il tempo che hai sshnel tuo percorso. Aggiungi quanto segue nel tuo profilo 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"      
    }
}

In una console PowerShell:

ssh-copy-id user@machine

ssh-copy-id non dovrebbe generare una chiave se non esiste.
RalfFriedl,

@RalfFriedl Ho rimosso il keygen
Fab
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.