Risposte:
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.
plink.exe -pw password
lavori. Anche se conosci .ssh / authorized_keys esiste il comando è semplicementetype id_rsa.pub | plink.exe -ssh user@host -pw password "cat >> .ssh/authorized_keys"
.ssh/
directory esiste. Il >>
reindirizzamento creerà quindi il file se non esiste.
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 user
tuo nome utente (a volte "root", o qualunque cosa tu abbia impostato), e sostituiscilo 123.45.67.89
con il tuo indirizzo IP macchina / host / VPS.
Se la directory .ssh
non è 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"
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.
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:
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 è 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.
authorized_keys
su linee singole è tutto ciò di cui avevo bisogno!
Se non lo hai ssh-copy-id
su Windows, puoi eseguirlo sul server stesso.
.pub
estensione..pub
file sul server.Sul server digitare:
ssh-copy-id -i mykey.pub username@localhost
Su Windows ssh-copy-id
script 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 .
(Sono l'autore di WinSCP)
Se stai usando cmder (o msysgit / mingw con scp & ssh), ho appena scritto un semplice script Python per questo. Può essere trovato qui: https://gist.github.com/ceilfors/fb6908dc8ac96e8fc983
Esempio di utilizzo: python ssh-copy-id.py user @ remote-machine.
La password verrà richiesta durante l'esecuzione dello script.
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)
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
Esiste una versione Windows di ssh-copy-id che ho trovato su GitHub: https://github.com/zhengyi-yang/ssh-copy-id/tree/master/dist
In effetti, può funzionare tutto il tempo che hai ssh
nel 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