Windows için ssh-copy-id eşdeğeri var mı?


56

Windows için herhangi bir eşdeğer veya ssh-copy-id bağlantı noktası var mı? Yani, SSH anahtarlarını yerel bir makineden Windows altındaki uzak bir sunucuya aktarmanın kolay bir yolu var mı?

Faydası olursa, Pageant ve Kitty (Macun alternatifi) kullanıyorum zaten.

Yanıtlar:


27

ssh-copy-id, pencerelerin altında çoğaltılması oldukça kolay olması gereken oldukça basit bir komut dosyasıdır.

Tüm parametre işleme, hata işleme vb. Dikkate almazsanız, bunlar aslında çoğu zaman işi yapan ssh-copy-id'den gelen iki komuttur.

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

Macun araçlarını kullanarak buna benzer bir komut eşdeğer olmalıdır (test edilmemiş).

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

Aynı hata işleme ve otomatik anahtar konumunu yapmak istiyorsanız, Windows altında bir komut dosyası yazmak daha zor, ancak kesinlikle mümkün olacaktır eminim.


1
Teşekkürler! İlk başta işe alamadım; "Erişim reddedildi" hatalarını geri alıyordum, ancak şifreyi girmeme izin vermek için plink durmuyordu. Daha sonra -pw anahtarını kullanarak şifreyi kopyalamayı denedim ve bu işe yaradı. Şifreyi ortasından girmeniz için duraklatmanın bir yolu olup olmadığını biliyor musunuz?
Matt V.

Parola doğrulama ve plink hakkında gerçekten emin değil. Gerçekte ne zaman kullansam, sistemde anahtarım zaten var ve pagent çalışıyor.
Zoredache

4
plink.exe -pw passwordEserleri. Ayrıca .ssh / type id_rsa.pub | plink.exe -ssh user@host -pw password "cat >> .ssh/authorized_keys"
KCD

@KCD .ssh/Dizinin mevcut olması yeterlidir . >>O yoksa yönlendirme sonra dosya oluşturur.
pabouk

20

Bu cevaplar bana yardımcı olmadı. Gerçekten çılgın senaryolara ihtiyacım yoktu. Müşteri makinemde git bash'ta ortak bir anahtar yaratmıştım ve bir VPS'ye kopyalamaya çalışıyordum.

Genel anahtarınızı oluşturduktan sonra, anahtar "(başlattığınız klasör) /. Ssh / id_rsa.pub" olarak depolanmalıdır.

Bu yüzden bu komutu kullanın: kullanıcı adınız
cat ~/.ssh/id_rsa.pub | ssh user@123.45.67.89 "cat >> ~/.ssh/authorized_keys" nerede user(bazen "root", ya da ne ayarladıysanız) ve 123.45.67.89makineniz / ana makineniz / VPS'nin IP adresi ile değiştirin.

Dizin .sshana makinede henüz oluşturulmadıysa, bu küçük varyasyonu kullanın:
cat ~/.ssh/id_rsa.pub | ssh user@123.45.56.78 "mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys"


2
Keşke daha fazla oy kullanabilseydim! -Bir-astar için!
patricktokeeffe

16

ssh-copy-id birkaç şey yapar ( detaylar için man sayfasını okuyun ), fakat en önemlisi yerel ortak anahtar dosyanızın içeriğini yetkili_keyler adı verilen uzak bir dosyaya eklemektir.

  • Bunu, anahtar dosyasını bir metin editörüyle açıp içeriğini Kitty terminaline yapıştırarak yapabilirsiniz.
    echo 'long_line_with_contents_of_public_key_file' >> .ssh/authorized_keys

  • Alternatif olarak, dosyayı WinSCP kullanarak yükleyebilir (sftp veya geri dönüş olarak scp kullanır) ve önceki önerime benzer bir şey yapabilir, çirkin kopya / yapıştırmadan kullanabilirsiniz.
    cat id_rsa.pub >> .ssh/authorized_keys
    id_rsa.pub, yüklediğiniz ortak anahtarın dosya adıdır.


5

Zoredache'ın cevabından ilham alan Windows sürümü olan bir sürü senaryo oluşturdum. Ancak hepsi pırıltıya bağlı. Lütfen buraya bir göz atın

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

Ayrıca başka bir cevaba göre kullanılabilecek bir winscp betiğim de var. :) Benioku bölümünden alıntı:

Şimdiye kadar uygulanan yöntemler:

  • DOS (.cmd) - Başarı
    • usage: .\Scriptname test@example.com password [identity file]
  • VBS (.vbs) - Başarı
    • usage: .\Scriptname /i:idtest.pub user@example.com /p:password
  • Powershell (.ps1) - Başarı
    • usage: .\Scriptname -i idtest.pub user@example.com password
  • mremoteNG (harici uygulama) - Başarı
    • Ana Bilgisayar'ı seçin, sağ tıklayın, harici araçlar, Komut Dosyası Adı'nı seçin
  • WinSCP betiği (.bat) - Başarı
    • # "WinSCP.com" /script=".\Scriptname" /parameter "user[:password]@example.com" "id_rsa.pub" [/log=".\copyssh.log]"

1
Bunlar çok tatlı
Pred

5

Windows 7'de bir ssh.exe var

İşte benim için çalıştı ne:

1. kimlik oluşturma (pencerelerde)

c:\>ssh-keygen

Bu ana dizinde bir kimlik dosyası oluşturdu. Genel anahtarın adını "id_rsa" olarak değiştirdim

2. ssh kullanarak hedef linux sisteme dosyayı kopyalamak için Kredi https://serverfault.com/users/984/zoredache onun cevabını

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

Not: Bazı sebeplerden dolayı, borular benim için işe yaramadı:

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

3. Linux'taki dosyayı düzeltin windows'daki id_rsa.pub dosyası, linux'un tek bir satırda beklediği çok satırlıdır, bu yüzden onu biraz düzeltmeliyiz. Linux'a giriş yapın ve dosyayı açın:

vi ~/.ssh/authorized_keys

Örneğin:

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

olmalı

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

4. test edin

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

Bu, şifre sormadan / tmp içeriğini listeler.


1
Step Adım 3 authorized_keysiçin. Tek hatlara yeniden biçimlendirme ihtiyacım olan tek şey!
patricktokeeffe

mutlu size yardımcı oldu - yukarı cevabı oy :)
Deian 16:18

5

Eğer yoksa ssh-copy-idWindows üzerinde, sunucunun kendisinde çalıştırabilirsiniz.

  • PuTTYgen'de özel anahtarınızı yükleyin (.ppk);
  • OpenSSH yetkili_keys dosyasına bir panoya yapıştırmak için Ortak anahtar kutusu içeriğini kopyalayın .
  • Favori düzenleyicinize yapıştırın (Windows Not Defteri yapacak).
  • İçeriği .pubuzantılı bir dosyaya kaydedin .
  • .pubDosyayı sunucuya yükleyin .
  • PuTTY gibi bir SSH istemcisi ile sunucuya giriş yapın.
  • Sunucuda şunu yazın:

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

Windows'ta ssh-copy-idkomut Windows için Git ile birlikte geliyor . Yani, eğer Windows için Git'iniz varsa, bunu yerel olarak kullanabilirsiniz.


Bunu el ile yapmak istemiyorsanız, WinSCP 5.15'i kullanabilirsiniz . Ortak anahtar kimlik doğrulamasını sizin için ayarlayabilir. WinSCP Advanced Site Settings iletişim kutusunun SSH> Kimlik Doğrulama sayfasındaki Araçlar> Genel Anahtarı Sunucuya Yükle düğmesini
kullanın .

görüntü tanımını buraya girin

(WinSCP'nin yazarıyım)


Bu kabul edilen cevap olmalıdır: Windows 7 için git-bash; Linux Alt Sistem Windows 10'da mevcut
Alex


0

yaptığım, Win10'umda CygWin'e sahip olmak, Linux'a bağlanmak (yukarıdaki cevaplara dayanarak):

- not: cat kullanarak, cygwin-linux-folder-yapısını kullanan cygwin komutunun yanı sıra cygwin yolunu otomatik olarak çözer.

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

Bu aşağıdaki adımlar olacaktır:

ADIM-1: RSA Anahtar Çifti Oluştur

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: Windows'taki ssh-copy-id eşdeğeri

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]

ADIM-3: Parolasız kimlik doğrulama çalışıyor!

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

Git For Windows'da bulunan SSH için Powershell sürümü

Aslında, sshyolunda olduğunuz sürece çalışabilir . PowerShell profilinize aşağıdakini ekleyin:

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

Bir powershell konsolunda:

ssh-copy-id user@machine

ssh-copy-id yoksa bir anahtar oluşturması beklenmez.
RalfFriedl

@RalfFriedl Keygen'i kaldırdım
Fab
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.