Apakah ada yang setara dengan ssh-copy-id untuk Windows?

56

Apakah ada yang setara atau port ssh-copy-id tersedia untuk Windows? Yaitu, adakah cara mudah untuk mentransfer kunci SSH dari mesin lokal ke server jarak jauh di bawah Windows?

Jika itu membantu, saya sudah menggunakan Pageant dan Kitty (alternatif Putty).

Matt V.
sumber

Jawaban:

27

ssh-copy-id adalah skrip yang cukup sederhana yang seharusnya mudah direplikasi di bawah windows.

Jika Anda mengabaikan semua penanganan parameter, penanganan kesalahan, dan sebagainya, ini adalah dua perintah dari ssh-copy-id yang benar-benar melakukan pekerjaan sebagian besar waktu.

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

Menggunakan alat dempul, perintah seperti ini harus sama (tidak diuji).

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

Jika Anda ingin melakukan semua penanganan kesalahan yang sama, dan lokasi kunci otomatis, saya yakin menulis skrip di Windows akan jauh lebih rumit, tetapi tentu saja mungkin.

Sakit kepala
sumber
1
Terima kasih! Awalnya saya tidak bisa bekerja; Saya mendapatkan kembali kesalahan "akses ditolak", tetapi plink tidak berhenti untuk membiarkan saya memasukkan kata sandi. Saya kemudian mencoba mengirimkan kata sandi menggunakan saklar -pw dan itu berhasil. Apakah Anda tahu jika ada cara untuk membuat jeda agar Anda memasukkan kata sandi di tengah jalan?
Matt V.
Tidak begitu yakin tentang otentikasi kata sandi dan plink. Setiap kali saya benar-benar menggunakannya, saya sudah memiliki kunci saya pada sistem, dan saya memiliki pagent berjalan.
Zoredache
4
plink.exe -pw passwordbekerja. Juga jika Anda tahu ada .ssh / berwenang_keys ada perintahnyatype id_rsa.pub | plink.exe -ssh user@host -pw password "cat >> .ssh/authorized_keys"
KCD
@KCD Cukup jika .ssh/direktori ada. The >>redirection kemudian akan membuat file jika tidak ada.
pabouk
20

Jawaban ini tidak membantu saya. Saya benar-benar tidak memerlukan skrip gila. Saya telah membuat kunci publik di mesin klien saya di git bash dan mencoba untuk menyalinnya ke VPS.

Setelah membuat kunci publik Anda, kunci tersebut harus disimpan sebagai "(folder apa pun yang Anda mulai) /. Ssh / id_rsa.pub"

Jadi gunakan perintah ini: di
cat ~/.ssh/id_rsa.pub | ssh [email protected] "cat >> ~/.ssh/authorized_keys" mana usernama pengguna Anda (kadang-kadang "root", atau apa pun yang telah Anda siapkan), dan ganti 123.45.67.89dengan alamat IP mesin / host / VPS Anda.

Jika direktori .sshbelum dibuat di mesin host, gunakan variasi kecil ini:
cat ~/.ssh/id_rsa.pub | ssh [email protected] "mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys"

Augie Gardner
sumber
2
Seandainya aku punya lebih banyak suara! 👍 untuk one-liner!
patricktokeeffe
16

ssh-copy-id melakukan beberapa hal (baca halaman manual untuk detailnya), tetapi hal terpenting yang dilakukannya adalah menambahkan konten file kunci publik lokal Anda ke file jarak jauh yang disebut otorisasi_keys.

  • Anda bisa melakukannya sendiri dengan membuka file kunci dengan editor teks dan menempelkan konten di terminal Kitty.
    echo 'long_line_with_contents_of_public_key_file' >> .ssh/authorized_keys

  • Atau, Anda dapat mengunggah file menggunakan WinSCP (yang menggunakan sftp, atau scp sebagai cadangan) dan melakukan sesuatu yang mirip dengan saran saya sebelumnya, tanpa menyalin / menempel dengan jelek.
    cat id_rsa.pub >> .ssh/authorized_keys
    di mana id_rsa.pub adalah nama file dari kunci publik yang Anda unggah.

Kenny Rasschaert
sumber
5

Terinspirasi oleh jawaban zoredache, saya telah membuat banyak skrip yang merupakan versi windows. Namun mereka semua bergantung pada plink. Silakan lihat di sini

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

Saya juga memiliki skrip wincp yang dapat digunakan sesuai jawaban lain. :) Kutipan dari readme:

Metode yang dicoba sejauh ini:

  • DOS (.cmd) - Sukses
  • VBS (.vbs) - Sukses
  • Powershell (.ps1) - Sukses
  • mremoteNG (aplikasi ekst) - Sukses
    • Pilih Host, klik kanan, alat eksternal, pilih Scriptname
  • Script WinSCP (.bat) - Sukses
    • # "WinSCP.com" /script=".\Scriptname" /parameter "user[:password]@example.com" "id_rsa.pub" [/log=".\copyssh.log]"
Vijay
sumber
1
Ini sangat manis
Pred
5

Di Windows 7 ada ssh.exe

Inilah yang bekerja untuk saya:

1. buat identitas (di windows)

c:\>ssh-keygen

Itu menciptakan file identitas di direktori home. Saya mengubah nama kunci publik menjadi "id_rsa"

2. salin file ke sistem linux target menggunakan Kredit ssh ke https://serverfault.com/users/984/zoredache untuk jawabannya

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

Catatan: Untuk beberapa alasan, perpipaan tidak berfungsi untuk saya:

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

3. Perbaiki file di linux File id_rsa.pub di windows adalah multiline di mana linux mengharapkannya dalam satu baris sehingga kita harus memperbaikinya sedikit. Login ke linux dan buka file:

vi ~/.ssh/authorized_keys

Sebagai contoh:

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

harus menjadi

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

4. mengujinya

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

Ini harus mencantumkan konten / tmp tanpa meminta kata sandi.

Deian
sumber
1
👍 untuk Langkah 3. Memformat ulang authorized_keyske baris tunggal adalah yang saya butuhkan!
patricktokeeffe
Senang itu membantu Anda - memilih suara :)
Deian
5

Jika Anda tidak memiliki ssh-copy-idWindows, Anda dapat menjalankannya di server itu sendiri.

  • Di PuTTYgen, muat kunci pribadi Anda (.ppk);
  • Salin isi dari kotak Public key untuk menempel ke file OpenSSH yang diotorisasi ke clipboard.
  • Rekatkan ke editor favorit Anda (Windows Notepad akan melakukannya).
  • Simpan konten ke file dengan .pubekstensi.
  • Unggah .pubfile ke server.
  • Login ke server dengan klien SSH, seperti Putty.
  • Pada jenis server:

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

Pada ssh-copy-idskrip Windows dilengkapi dengan Git untuk Windows . Jadi Anda dapat menggunakannya secara lokal, jika Anda memiliki Git untuk Windows.


Jika Anda tidak ingin melakukan ini secara manual, Anda dapat menggunakan WinSCP 5.15. Ini dapat mengatur otentikasi kunci publik untuk Anda.
Gunakan Alat> Instal Kunci Publik ke tombol Server pada SSH> halaman Otentikasi dialog Pengaturan Situs Lanjutan WinSCP .

masukkan deskripsi gambar di sini

(Saya penulis WinSCP)

Martin Prikryl
sumber
Ini harus menjadi jawaban yang diterima: git-bash untuk Windows 7; Subsistem Linux tersedia di Windows 10
Alex
0

Jika Anda menggunakan cmder (atau msysgit / mingw yang memiliki scp & ssh), saya baru saja menulis skrip python sederhana untuk ini. Itu dapat ditemukan di sini: https://gist.github.com/ceilfors/fb6908dc8ac96e8fc983

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

Kata sandi akan diminta saat menjalankan skrip.

langit-langit
sumber
mengapa ini membutuhkan cmder?
David Zorychta
@ user57411 Tidak memerlukan cmder, itu membutuhkan perintah scp dan ssh.
ceilfors
0

apa yang saya lakukan, memiliki CygWin di Win10 saya, terhubung ke Linux (berdasarkan jawaban di atas):

- note: menggunakan cat, ia akan menyelesaikan jalur cygwin secara otomatis, serta perintah cygwin menggunakan struktur cygwin-linux-folder-structure

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

Langkah-langkah berikut akan dilakukan:

LANGKAH-1: Hasilkan Pasangan Kunci 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 setara di 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]

LANGKAH-3: Otentikasi tanpa kata sandi berfungsi!

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

Versi Powershell untuk SSH termasuk dalam Git Untuk Windows

Bahkan, itu bisa bekerja selama Anda ada sshdi jalur Anda. Tambahkan yang berikut ini di profil PowerShell Anda:

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

Di konsol PowerShell:

ssh-copy-id user@machine
Hebat
sumber
ssh-copy-id tidak seharusnya menghasilkan kunci jika tidak ada.
RalfFriedl
@RalfFriedl Saya menghapus keygen
Fab