Windows SSH: Izin untuk 'kunci pribadi' terlalu terbuka

102

Saya telah menginstal OpenSSH 7.6 di Windows 7 untuk tujuan pengujian. SSH client & server berfungsi dengan baik sampai saya mencoba mengakses salah satu kotak AWS EC2 saya dari windows ini.

Sepertinya saya perlu mengubah izin pada file kunci pribadi. Hal ini dapat dengan mudah dilakukan pada unix / linux dengan chmodperintah.

Bagaimana dengan windows?

private-key.ppm disalin langsung dari AWS dan saya kira izinnya juga.

C:\>ssh -V
OpenSSH_7.6p1, LibreSSL 2.5.3

C:\>ver

Microsoft Windows [Version 6.1.7601]

C:\>


C:\>ssh [email protected] -i private-key.ppk
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for 'private-key.ppk' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "private-key.ppk": bad permissions
[email protected]: Permission denied (publickey).

C:\>
C:\>
C:\>ssh [email protected] -i private-key.ppm
Warning: Identity file private-key.ppm not accessible: No such file or directory.
[email protected]: Permission denied (publickey).

C:\>
Sabrina
sumber
Sudahkah Anda mencoba memodifikasi ACL?
Ignacio Vazquez-Abrams
1
Apakah kunci pribadi Anda sebenarnya di jalur C: \ root? Saya bisa melihat mengapa itu mengeluh karena biasanya hal-hal di C: \ dapat diakses oleh semua orang. Sudahkah Anda mencoba memindahkannya ke folder yang hanya Anda sebagai pengguna yang memiliki akses (mis. C: \ Users \ username \ desktop) dan melihat apakah pesan itu masih muncul?
Darius
@Darius, ya itu. Ketika Anda menyalin file dari unix / linux ke windows, izin juga disalin. Saya perlu mengubah ini tetapi tidak yakin bagaimana melakukannya di windows. Ini dapat dengan mudah dilakukan di unix / linux dengan perintah chmod.
Sabrina
@ IgnacioVazquez-Abrams, ACL? ACL macam apa?
Sabrina
1
@Sabrina Entah Anda menggunakan perintah icacls untuk mengubah izin, atau cukup klik kanan pada Private Key, dan pilih Properties, dan centang di bawah tab "Security". Dan pastikan itu hanya dapat diakses oleh Anda / siapa pun yang seharusnya dapat mengakses kunci pribadi. Jika "Pengguna" memiliki akses baca - berarti siapa pun yang memiliki akses ke sistem dapat membaca kunci pribadi itu.
Darius

Jawaban:

119

Anda menemukan file di Windows Explorer, klik kanan padanya lalu pilih "Properties". Arahkan ke tab "Security" dan klik "Advanced".

Ubah pemiliknya untuk Anda, nonaktifkan pewarisan dan hapus semua izin. Kemudian berikan diri Anda "Kontrol penuh" dan simpan izin. Sekarang SSH tidak akan mengeluh tentang izin file yang terlalu terbuka lagi.

Seharusnya terlihat seperti ini:

masukkan deskripsi gambar di sini

iBug
sumber
2
Saya hanya ingin menambahkan 1) Metode ini berfungsi pada kotak Windows 10 ( 10.0.17134.191) saya w / Cygwin ver CYGWIN_NT-10.0-WOW 2.3.1(0.291/5/3) 2015-11-14 12:42dan ssh ver OpenSSH_for_Windows_7.6p1, LibreSSL 2.6.4, dan 2) Terima kasih! @ iBug!
atreyu
JIKA file kunci ada di Thumb Drive / Flash disk, tab Security itu tidak tersedia!
Dylan B
@DylanB Mengapa Anda meletakkan kredensial di drive yang dapat dilepas? (Faktanya, tab itu hanya tersedia di sistem file NTFS - Anda dapat memformat drive Anda menjadi NTFS dengan mudah).
iBug
11
Sebenarnya, saya melakukan itu dan masih mengeluh bahwa izin 0777 terlalu terbuka.
Aaron Bramson
10
Mengapa ini sangat sulit di windows, bisakah seseorang menambahkan opsi perintah --ignore-stupid-rule?
Liam Mitchell
22

Kunci hanya dapat diakses oleh pengguna yang dimaksudkan untuknya dan tidak ada akun, layanan, atau grup lain.

  • GUI:
    • Properti [File] - Keamanan - Lanjutan
      1. Tetapkan Pemilik ke pengguna kunci
      2. Hapus semua pengguna, grup, dan layanan, kecuali untuk pengguna kunci , di bawah Entri Izin
      3. Setel pengguna kunci ke Kontrol Penuh


  • CLI:

    :: Set Variable ::
    set key="C:\Path\to\key"
    
    :: Remove Inheritance ::
    cmd /c icacls %key% /c /t /inheritance:d
    
    :: Set Ownership to Owner ::
    cmd /c icacls %key% /c /t /grant %username%:F
    
    :: Remove All Users, except for Owner ::
    cmd /c icacls %key%  /c /t /remove Administrator "Authenticated Users" BUILTIN\Administrators BUILTIN Everyone System Users
    
    :: Verify ::
    cmd /c icacls %key%
JW0914
sumber
Bagaimana jika pemiliknya sebenarnya sebuah grup? Dalam kasus saya, saya memiliki file yang dimiliki oleh network serviceCygwin sehingga menurut saya izinnya adalah 0770, bukan 0700.
hyspace
File harus dimiliki oleh pengguna dan grup, bukan hanya grup. Izin grup adalah oktal ke-3 [pengguna adalah ke-2] dalam spesifikasi empat oktal dan kunci SSH tidak dapat diakses grup atau orang lain
JW0914
Itu adalah kasus Unix. Di Windows, network servicedapat memiliki file dan itu adalah grup
hyspace
Cygwin memungkinkan fungsionalitas POSIX API pada Windows, tetapi masih beroperasi di bawah aturan program berbasis UNIX asli (karenanya 3 & 4 izin oktal dalam pengaturan UGO). Meskipun Anda dapat membuka masalah pada GitHub Microsoft Win32-OpenSSH, karena kunci SSH harus dikelompokkan dan yang lainnya tidak dapat diakses , memiliki kepemilikan dalam cara yang Anda gambarkan kemungkinan tidak didukung. Lebih baik menyesuaikan diri dengan norma program daripada mencoba mengkonfigurasinya dengan cara [yang kemungkinan] tidak didukung.
JW0914
1
ini harus jawaban yang benar. Terima kasih untuk opsi CLI. GUI selalu payah di case windows.
shyammakwana.me
10

Selain jawaban yang diberikan oleh ibug. Karena saya menggunakan sistem ubuntu di dalam windows untuk menjalankan perintah ssh. Itu masih tidak berfungsi. Jadi saya lakukan

sudo ssh ...

dan kemudian berhasil

Parv Sharma
sumber
sudotidak boleh digunakan untuk membuka sesi SSH karena ini merupakan risiko keamanan. Satu-satunya waktu (setidaknya yang saya tahu) akun root harus digunakan untuk membuka sesi SSH adalah pada sistem pengguna tunggal (yaitu biasanya ditemukan pada router OS [OpenWrt, DD-WRT, dll.] Dan sistem tertanam lainnya ) . Kunci SSH harus dapat diakses hanya untuk pengguna dan bukan untuk akun, layanan, atau grup lain.
JW0914
@ JW0914 LOL Saya memiliki server Debian satu pengguna dan satu-satunya (login) pengguna adalah root. Saya tidak berpikir pengguna non-root tambahan bermanfaat karena ini adalah server pribadi saya dan saya masuk hanya ketika melakukan pekerjaan pemeliharaan.
iBug
@ iBug Harap baca kembali komentar saya, karena sepertinya Anda sepenuhnya melewatkan kalimat kedua ...
JW0914
5

Saya memiliki masalah yang sama, dan tampaknya terkait dengan versi SSH yang Anda jalankan.

Jika saya mengetik

where ssh

Saya mendapat...

C:\Windows\System32\OpenSSH\ssh.exe
C:\Program Files\Git\usr\bin\ssh.exe

Ketika saya berlari ssh -Vdi kedua lokasi, saya mengerti

OpenSSH_7.5p1, without OpenSSL
OpenSSH_7.3p1, OpenSSL 1.0.2k  26 Jan 2017

... masing-masing

Jadi, ketika saya menjalankan sshdari direktori git / bin, ia berfungsi dengan baik dan tidak mengeluh tentang izin, tetapi menjalankan baris perintah yang sama, menggunakan bekas instalasi SSH, ia kembali dengan ini.

Load key "t:\\mykeys\\rich-private.ppk": invalid format
[email protected]: Permission denied (publickey).

ps. izin pada file tersebut hanya akses penuh untuk saya sendiri, dan tidak ada yang lain.

Rich S
sumber
OpenSSH tidak boleh diinstal ke direktori Windows untuk seluruh alasan, dari keamanan, hingga menjadi ketidaknyamanan besar jika seseorang harus memperbaiki direktori Windows yang rusak baik melalui DISMatau menggunakan opsi Reset (yang telah ditingkatkan untuk menggunakan direktori WinSxS versus kembali ke aslinya install.esd) .
JW0914
Inilah yang membantu saya, saya tidak pernah mendapatkan versi windows ssh untuk bekerja dalam skenario ini, hanya Git :(
cudacoder
Ini juga perbaikan untuk saya. Tampaknya Windows 10 Pro sekarang bundel versi openssh pooched. Saya terpaksa menghapus folder C: \ Windows \ System32 \ OpenSSH dan menambahkan ssh.exe git ke PATH.
Shukri Adams
Ini "diperbaiki" untuk saya, menggunakan C: \ Program Files \ Git \ usr \ bin \ ssh.exe berfungsi sebagai C: \ Windows \ System32 \ OpenSSH \ ssh.exe tidak
smartins
3

Anda perlu hanya 2 hal:

1) Nonaktifkan warisan masukkan deskripsi gambar di sini

2) Konversi izin yang diwarisi menjadi izin eksplisit masukkan deskripsi gambar di sini

3) Hapus grup Pengguna masukkan deskripsi gambar di sini

4) Anda akan berakhir tanpa Pengguna dapat mengakses file pribadi, ini sudah cukup untuk menambahkan id_rsa. masukkan deskripsi gambar di sini

Artur Mustafin
sumber
2

Saya memiliki masalah serupa tetapi saya sedang bekerja dan tidak memiliki kemampuan untuk mengubah izin file di komputer kerja saya. Yang perlu Anda lakukan adalah menginstal WSL kemudian menyalin kunci Anda ke direktori ssh tersembunyi di WSL:

cp <path to your key> ~/.ssh/<name of your key>

Sekarang Anda harus dapat memodifikasi izin secara normal.

sudo chmod 600 ~/.ssh/<your key's name>

Kemudian ssh menggunakan WSL:

ssh -i ~/.ssh/<name of your key> <username>@<ip address>

JKauffman
sumber
2

gunakan perintah di bawah ini pada kunci Anda ini berfungsi pada windows

icacls .\private.key /inheritance:r
icacls .\private.key /grant:r "%username%":"(R)"
Walter Ferrao
sumber
1

Anda dapat menggunakan icacls di windows daripada chmod untuk menyesuaikan izin file. Untuk memberi izin kepada pengguna saat ini dan menghapus yang lainnya,

icacls <file name> /inheritance:r
icacls <file name> /grant:r "%username%":"(R)"
manjuv
sumber
1

Ini hanya versi skrip dari jawaban CLI @ JW0914, jadi jawab dia terlebih dahulu dan terutama. Juga, ini adalah skrip PowerShell pertama saya, jadi sarannya disambut.

# DO the following in powerhsell if not already done:
# Set-ExecutionPolicy RemoteSigned


# NOTE: edit the path in this command if needed
$sshFiles=Get-ChildItem -Path C:\DevContainerHome\.ssh -Force

$sshFiles | % {
  $key = $_
  & icacls $key /c /t /inheritance:d
  & icacls $key /c /t /grant %username%:F
  & icacls $key  /c /t /remove Administrator "Authenticated Users" BUILTIN\Administrators BUILTIN Everyone System Users
}

# Verify:
$sshFiles | % {
  icacls $_
}
bbarker
sumber
1

Satu baris dalam CMD dapat melakukan trik (seperti dijelaskan di sini: https://serverfault.com/a/883338/550334 ), yaitu menambahkan kunci dari stdin alih-alih mengubah permissons:

cat /path/to/permission_file | ssh-add -k 

Untuk memeriksa apakah kunci telah ditambahkan:

ssh-add -l
majom
sumber
0

Saya pengguna Window, menggunakan bash Windows dan mengikuti semua langkah untuk mengatur izin menggunakan Windows GUI, dan masih tidak berfungsi dan mengeluh:

Permissions 0555 for 'my_ssh.pem' are too open.
It is required that your private key files are NOT accessible by others.

Saya menambahkan sudodi bagian depan perintah ssh dan hanya berfungsi. Semoga ini bermanfaat bagi orang lain.

Alex Ramses
sumber
Tetapi apakah Anda masuk ke server sebagai diri sendiri atau sebagai root?
G-Man Mengatakan 'Reinstate Monica'
Saya menjalankan terminal Window bash seperti saya sendiri, tetapi saya menjalankan 'Run as adminstrator' ketika saya meluncurkan Bash.
Alex Ramses
-1

Jawaban oleh iBug berfungsi dengan baik! Anda dapat mengikuti itu dan menyingkirkan masalah ini.

Tetapi ada beberapa hal yang perlu dibersihkan karena saya menghadapi masalah selama mengatur izin dan butuh beberapa menit bagi saya untuk mencari tahu masalahnya!

Mengikuti jawaban iBug, Anda akan menghapus semua izin tetapi bagaimana Anda menetapkan izin Kontrol Penuh untuk diri sendiri? di situlah saya terjebak pada awalnya karena saya tidak tahu bagaimana melakukannya.

Setelah Menonaktifkan Warisan, Anda akan dapat menghapus semua pengguna atau grup yang diizinkan.

Setelah selesai dengan itu,

Klik pada Addlalu klik pada Set a Principalkemudian masuk Systemdan Administratorsdan your email addredddi bidang di bawah lalu klikcheck names .

Itu akan memuat nama jika pengguna ada. Kemudian, Klik pada OK> Tipe Allow> Permisison Dasar Full Control>Okay

Ini akan mengatur izin Kontrol Penuh untuk SISTEM, Administrator dan Pengguna Anda.

Setelah itu coba ssh menggunakan kunci itu. Itu harus diselesaikan sekarang.

Saya memiliki masalah yang sama dan saya menyelesaikannya dengan menggunakan metode ini. Jika ada pengguna atau grup dengan nama itu maka itu akan memuatnya.

-Screenshots-

Entri Izin Pilih Pengguna Utama / Pilih atau Grup

lazycipher
sumber