Windows SSH: 'private-key' için izinler çok açık


99

Windows 7'de test amaçlı OpenSSH 7.6 kullandım. SSH istemci ve sunucu bu pencerelerden AWS EC2 kutumdan birine erişmeyi deneyene kadar gayet iyi çalışıyor.

Özel anahtar dosyadaki izinleri değiştirmem gerekiyor gibi görünüyor. Bu, unix / linux'da chmodkomut ile kolayca yapılabilir .

Peki ya pencereler?

private-key.ppm doğrudan AWS'den kopyalanır ve sanırım izinleri de var.

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

C:\>ver

Microsoft Windows [Version 6.1.7601]

C:\>


C:\>ssh ubuntu@192.168.0.1 -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
ubuntu@192.168.0.1: Permission denied (publickey).

C:\>
C:\>
C:\>ssh ubuntu@192.168.0.1 -i private-key.ppm
Warning: Identity file private-key.ppm not accessible: No such file or directory.
ubuntu@192.168.0.1: Permission denied (publickey).

C:\>

ACL'yi değiştirmeyi denediniz mi?
Ignacio Vazquez Abrams

1
Özel anahtarınız aslında C: \ root yolunda mı? Neden şikâyetçi olduğunu genellikle C: \ 'da olanlara herkesin erişebildiğini anlayabiliyorum. Yalnızca kullanıcının erişimi olan bir klasöre taşımayı denediniz mi (örn. C: \ Users \ kullanıcı adı \ masaüstü) ve bu mesajın hala gelip gelmediğine bakın?
Darius

@Darius, evet öyle. Bir dosyayı unix / linux'dan pencerelere kopyaladığınızda izin de kopyalanır. Bunu değiştirmem gerekiyor ama pencerelerde nasıl yapılacağından emin değilim. Bu, chmod komutuyla unix / linux üzerinde kolayca yapılabilir.
Sabrina,

@ IgnacioVazquez-Abrams, ACL? Ne tür ACL?
Sabrina,

1
@Sabrina İzni değiştirmek için icacls komutunu kullanırsınız veya Özel Anahtar'a sağ tıklayın, Özellikler'i seçin ve "Güvenlik" sekmesine bakın. Ayrıca, yalnızca özel anahtara erişebilmesi gereken / sizin tarafınızdan erişilebildiğinden emin olun. "Kullanıcılar" okuma erişimine sahipse - sisteme erişimi olan herkes bu özel anahtarı okuyabilir.
Darius

Yanıtlar:


114

Dosyayı Windows Gezgini'nde bulun, sağ tıklayın ve ardından "Özellikler" i seçin. "Güvenlik" sekmesine gidin ve "Gelişmiş" i tıklayın.

Sahibini kendiniz değiştirin, devralmayı devre dışı bırakın ve tüm izinleri silin. Sonra kendinize "Tam kontrol" verin ve izinleri kaydedin. Artık SSH, artık dosya açma izninden şikayet etmiyor.

Bunun gibi görünmek zorunda kalacak:

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


2
Eklemek istiyorum sadece 1) Bu yöntem, Windows 10 ( 10.0.17134.191) kutumda Cygwin ver CYGWIN_NT-10.0-WOW 2.3.1(0.291/5/3) 2015-11-14 12:42ve ssh ver OpenSSH_for_Windows_7.6p1, LibreSSL 2.6.4ve 2 ile çalışır) ve 2) Teşekkürler! @iBug!
atreyu,

Anahtar dosyası Thumb Drive / Flash disk üzerindeyse, Güvenlik sekmesi kullanılamaz!
Dylan B,

@DylanB Neden çıkarılabilir bir sürücüye kimlik bilgileri yerleştirdiniz? (Aslında, bu sekme yalnızca NTFS dosya sistemlerinde bulunur - sürücünüzü kolayca NTFS'ye biçimlendirebilirsiniz).
iBug

11
Aslında, bunu yaptım ve hala 0777 izinlerinin çok açık olduğundan şikayet ediyor.
Aaron Bramson

10
Neden bu pencerelerde bu kadar zor, birisi sadece --ignore-aptal-kural komut seçeneği ekleyebilir mi?
Liam Mitchell

21

Anahtarlar yalnızca amaçladıkları kullanıcı tarafından erişilebilir olmalı ve başka hesap, servis veya grup içermemelidir.

  • GUI:
    • [Dosya] Özellikleri - Güvenlik - Gelişmiş
      1. Sahibi'ni anahtarın kullanıcısına ayarla
      2. İzin Girdileri altındaki anahtarın kullanıcısı dışındaki tüm kullanıcıları, grupları ve hizmetleri kaldırın.
      3. Anahtarın kullanıcısını Tam Kontrole ayarla


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

Peki ya sahibi gerçekten bir grupsa? Benim durumumda, ben sahibi olduğu dosya var network serviceCygwin izni 0770 yerine 0700. düşünüyor bu yüzden
hyspace

Bir dosya yalnızca bir gruba değil bir kullanıcıya ve gruba ait olmalıdır. Grup izinleri, dört sekizlik belirtiminde 3. kullanıcıdır (kullanıcı
2.'dir)

Unix'in durumu budur. Windows'ta network servicebir dosyaya sahip olabilir ve bir gruptur
hyspace

Cygwin, Windows'ta POSIX API işlevselliğine izin verir, ancak hala yerel UNIX tabanlı programların kuralları altında çalışır (dolayısıyla bir UGO kurulumunda 3 ve 4 sekizli izinler). Microsoft'un Win32-OpenSSH's GitHub'ında bir sorun açabilseniz de, SSH anahtarları grup ve erişilemez durumda olduğundan , açıkladığınız şekilde sahip olmanız muhtemelen desteklenmiyor. Bir programın normuna uymak, onu [muhtemelen] desteklenmeyen bir şekilde yapılandırmaya çalışmaktan daha iyidir.
JW0914

1
bu doğru cevap olmalı. CLI seçenekleri için teşekkürler. GUI her zaman windows durumunda berbat.
shyammakwana.me

10

İbug tarafından verilen cevaba ek olarak. Çünkü ssh komutunu çalıştırmak için pencerelerin içindeki ubuntu sistemini kullanıyordum. Hala işe yaramadı. Ben de yaptım

sudo ssh ...

ve sonra çalıştı


sudoGüvenlik riski olduğu için SSH oturumu açmak için kullanılmamalıdır. Bir SSH oturumu açmak için root hesabının kullanılması gereken tek zaman (en azından bildiğim kadarıyla) , tek kullanıcılı sistemlerde (normal olarak yönlendirici işletim sisteminin [OpenWrt, DD-WRT vb.] Ve diğer yerleşik sistemlerde bulunur). ) . SSH anahtarlarına yalnızca oldukları kullanıcı için erişilebilir olmalı ve başka hesap, servis veya grup içermemelidir.
JW0914

@ JW0914 LOL Tek kullanıcılı bir Debian sunucum var ve tek (giriş) kullanıcısı root. Kök harici bir kullanıcının faydası olduğunu sanmıyorum, çünkü bu benim kişisel sunucum ve yalnızca bakım çalışmaları yaparken oturum açıyorum.
iBug

@iBug Lütfen yorumumu tekrar okudum, görünen o ki, ikinci cümleyi tamamen kaçırdın ...
JW0914

5

Aynı problemi yaşadım ve çalıştırmakta olduğunuz SSH sürümü ile ilgili gibi görünüyor.

Yazarsam

where ssh

Alırım...

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

Her ssh -Viki yerde de koşarken , alıyorum

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

...sırasıyla

Bu yüzden sshgit / bin dizininden kaçtığımda, iyi çalışıyor ve izinlerden şikayet etmiyor, ancak aynı komut satırını çalıştırarak, eski SSH kurulumunu kullanarak, bununla geri geliyor.

Load key "t:\\mykeys\\rich-private.ppk": invalid format
banana@127.0.0.127: Permission denied (publickey).

ps. dosyadaki izinler kendim için tam erişimdir ve başka hiçbir şey yapmaz.


OpenSSH, tüm nedenlerden dolayı Windows dizinine kurulmamalı, güvenlikten büyük bir sakıncalığa kadar bozuk bir Windows dizinini DISMSıfırla seçeneğini kullanarak veya bu seçeneği kullanarak (WinSxS dizini kullanacak şekilde geliştirildi)install.esd düzeltmeli orijinaline dönme yerine ) .
JW0914

Bu bana yardımcı oldu, bu senaryoda çalışacak windows ssh versiyonunu hiç almadım, sadece
Git'in

Bu da benim için düzeldi. Görünüşe göre, Windows 10 Pro şimdi openssh'ın bir sürümünü içermektedir. C: \ Windows \ System32 \ OpenSSH klasörünü kaldırmak ve git's ssh.exe dosyasını PATH'ye eklemek zorunda kaldım.
Shukri Adams

Bu benim için "sabit" C: \ Program Files \ Git \ usr \ bin \ ssh.exe kullanarak C: \ Windows \ System32 \ OpenSSH \ ssh.exe çalışmıyor
smartins

3

Jsut 2'ye ihtiyacınız var:

1) Kalıtımın devre dışı bırakılması görüntü tanımını buraya girin

2) Miras alınan izinleri açık izinlere dönüştürün görüntü tanımını buraya girin

3) Kullanıcılar grubunu kaldır görüntü tanımını buraya girin

4) Hiçbir kullanıcının özel dosyalara erişmesine izin vermeyeceksiniz, bu id_rsa'yı eklemek için yeterli olmalıdır. görüntü tanımını buraya girin


2

Benzer bir sorunum vardı ama işteydim ve çalışma bilgisayarımdaki dosya izinlerini değiştirme yeteneğim yoktu. Yapmanız gereken şey WSL'yi yüklemek ve ardından anahtarınızı WSL'deki gizli ssh dizinine kopyalamak:

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

Şimdi izinleri normal şekilde değiştirebilmelisiniz.

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

Sonra WSL kullanarak ssh:

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


2

Anahtarınızın altındaki komutu kullanın pencerelerde çalışır

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

1

Dosya iznini ayarlamak için icacls komutunu chmod yerine pencerelerde kullanabilirsiniz. Geçerli kullanıcıya okuma izni vermek ve diğer her şeyi kaldırmak için,

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

0

Bu sadece @ JW0914'ün CLI cevabının sadece bir versiyonudur, bu yüzden onu en başta oylayın. Ayrıca, bu benim ilk PowerShell betiğim, bu yüzden öneri hoş geldiniz.

# 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 $_
}


-1

Tarafından cevap iBug iyi çalışıyor! Bunu takip edebilir ve bu konudan kurtulabilirsin.

Ancak izinleri belirlerken sorunlarla karşılaştığımda temizlenmesi gereken birkaç şey var ve bu sorunu çözmem birkaç dakika sürdü!

İBug'un cevabını izleyerek tüm izinleri kaldıracaksınız ancak Tam Denetim iznini kendinize nasıl ayarladınız? ilk başlarda sıkışıp kaldığım yer burayı nasıl yapacağımı bilmiyordum.

Kalıtım Devre Dışı Bırakıldıktan sonra, tüm izin verilen kullanıcıları veya grupları silebilirsiniz.

Bir kez bununla işim bitti,

Tıkla, Adddaha sonra tıkla, Set a Principaldaha sonra gir Systemve Administratorsve your email addreddaltındaki alana gir sonra tıkla check names.

Kullanıcı varsa adı yükleyecektir. Sonra, OK> Yazım Allow> Temel İzinler Full Control>Okay

Bu, SYSTEM, Yöneticiler ve Kullanıcıya Tam Denetim izni verecektir.

Bundan sonra bu tuşu kullanarak ssh yapmaya çalışın. Şimdi çözülmeli.

Aynı sorunu yaşadım ve bu yöntemi kullanarak çözdüm. Bu ada sahip herhangi bir kullanıcı veya grup varsa, onu yükleyecektir.

-Ekran görüntüleri-

İzin Girdileri Bir Yönetici Seç / Kullanıcı veya Grup Seç

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.