Błąd „Zły właściciel lub uprawnienia” przy użyciu ssh.exe Cygwin

29

Próbuję użyć ssh.exe w Cygwin (w Windows 7). Skopiowałem configplik do c:\cygwin\home\[USERNAME]\.ssh. Kiedy uruchamiam ssh(na przykład ssh -vT [email protected]), pojawia się następujący błąd:

OpenSSH_5.9p1, OpenSSL 0.9.8r 8 lutego 2011 Zły właściciel lub uprawnienia na /home/[USERNAME]/.ssh/config

Jak mogę sshodczytać mój plik konfiguracyjny?

Rebecca Scott
źródło

Odpowiedzi:

46

Po wykonaniu powyższych czynności zawsze otrzymałem:

total 22
drwxrwxr-x+ 1 jl None    0 Sep  9 18:44 .
drwxrwxr-x+ 1 jl None    0 Sep  9 18:44 ..
-rw-rw----  1 jl None  129 Jul  1 14:30 config

i błąd włączony .ssh/config. Więc Zabrakło mi chownna .sshfolderze, i chmodznowu tak:

> chown -R [USERNAME]:users .ssh/

i wtedy:

> chmod -R 600 .ssh/

i wreszcie mam to działa:

total 29
drwxrwxr-x+ 1 jl None     0 Sep  9 18:44 .
drwxrwxrwt+ 1 jl None     0 Sep  9 18:44 ..
drw-------+ 1 jl Users    0 Sep  9 18:44 .ssh

Edycja (dla bash na Windows10)

Gdy pojawi się błąd ..

Nie udało się dodać hosta do listy znanych hostów (/PATH_TO_HOME/USERNAME/.ssh/known_hosts).

Upewnij się, że znane_hosty są zapisywalne

$ chmod 755 znane_hosty

Uwaga: Uważam, że wystarczy ustawić 600 dla klucza prywatnego

Następnie spróbuj ssh.

Kiedy dostaniesz..

Na stałe dodano „HOST_IP” (RSA) do listy znanych hostów.

Możesz zastąpić tryb 600

$ chmod 600 znane_hosty

PS : Myślę, że to błąd w systemie Windows 8.

Joaolvcm
źródło
Przyjęta odpowiedź nie działała dla mnie, ale tak się stało. Dzięki!
Achal Dave
Jest to również dość dziwny błąd. Na moim komputerze (W8.1) edycja pliku .ssh / config w Vimie zawsze prowadzi do tego błędu. To bardzo denerwujące, ponieważ każda zmiana w mojej konfiguracji ssh wymaga uruchomienia tych poleceń.
Achal Dave
4
I aby dodać do dziwności, jeśli używasz wersji systemu Windows w języku innym niż angielski, pamiętaj, aby podczas wydawania tego polecenia użyć tłumaczenia lokalnego „użytkowników”. Na przykład w języku niderlandzkim staje się „chown -R: Gebruikers .ssh”
Alexander Kellett
1
Dla mnie to zadziałało: chown -R m0j0: Użytkownicy .ssh && chmod -R go-rwx .ssh
m0j0
1
Dzięki, że to zadziałało również dla mnie, w języku niemieckim musisz użyćchown -R [Username]:Benutzer .ssh/
con
20

Ta odpowiedź jest kopiowana dosłownie z https://superuser.com/a/875934/82032 . To jedyna odpowiedź, która zadziałała dla mnie po ostatniej aktualizacji Cygwina.

Nie zapomnij o listach ACL

Nic mi nie działało, dopóki nie usunąłem pliku list ACL i nie zresetuję uprawnień.

#remove ACLs
setfacl -b ~/.ssh/config

#reset permissions
chmod 0600 ~/.ssh/config

Możesz użyć getfacldo wyświetlenia bieżącej listy ACL dla pliku.

getfacl ~/.ssh/config

Zanim usunąłem listy ACL (uszkodzony):

# owner: Administrators
# group: None
user::rw-
group::---
group:Authenticated Users:rwx
group:SYSTEM:rwx
mask:rwx
other:---

Po pracy)

# file: config
# owner: myusername
# group: None
user::rw-
group::---
other:---
gdw2
źródło
Właśnie to musiałem zrobić po aktualizacji
cygwina
1
Wymaga to cygwin 1.7.34-6
ClintM
To działało dla mnie!
Ashutosh Jindal
9

Sprawdź uprawnienia do configpliku za pomocą lspolecenia Cygwin :

> c:\cygwin\bin\ls.exe -la c:\cygwin\home\[USERNAME]\.ssh

Prawdopodobnie będzie to coś takiego:

total 5
drwxrwxrwt+ 1 Administrators None  0 Oct 20 17:02 .
drwxr-xr-x+ 1 [USERNAME]     None  0 Oct 19 08:15 ..
-rw-------  1 Administrators None 57 Oct 20 16:58 config

Plik konfiguracyjny musi należeć do [NAZWA UŻYTKOWNIKA]. Spróbuj tego:

> c:\cygwin\bin\chown.exe [USERNAME] c:\cygwin\home\[USERNAME]\.ssh\config

ls -lapowinien teraz pokazywać poprawnego właściciela. Jeśli to nadal nie działa, spróbuj zresetować tryb (uprawnienia):

> c:\cygwin\bin\chmod.exe 700 c:\cygwin\home\[USERNAME]\.ssh\config
Rebecca Scott
źródło
9

Dla Uniksa i OSX

Całkiem proste:

chown -R $USER:users ~/.ssh/
chmod -R 600 ~/.ssh/

Dla Windowsa

Jeśli plik jest dowiązaniem symbolicznym systemu Windows (NTFS), powyższe nie będzie działać. Musisz ustawić go jako zwykły plik. Nie jestem pewien dlaczego.

Jeśli nie masz openssh lub cygwin, użyj Chocolatey, aby łatwo zainstalować.

choco install cyg-get

Otwórz terminal Cygwin, który został zainstalowany w Chocolatey i uruchom (uwaga, że ssh-keygentworzy nowe klucze):

cyg-get install openssh
ssh-keygen
cd ~/.ssh && explorer.exe .

Sprawdź, czy istnieją klucze (lub zastąp je kluczami, które chcesz), a następnie w powłoce Cygwin:

chown -R $USER:users ~/.ssh/
chmod -R 600 ~/.ssh/

Lub w rzadkim przypadku, w którym używasz (i generowałeś klucze) pakietu SSH Chocolatey :

chown -R $USER:users  /cygdrive/c/Users/$USER/.ssh
chmod -R 600 /cygdrive/c/Users/$USER/.ssh
Jonathan
źródło
Zwykle jest to dla mnie, ponieważ grupa zwykle nie ma racji w plikach.
Alan Krueger
3

Ważna uwaga, jeśli twój system Windows nie jest w języku angielskim: nazwa grupy użytkowników zależy od ustawień regionalnych. Na przykład, jeśli twój system Windows jest w języku hiszpańskim, będziesz musiał zmienić właściciela plików za pomocąchown $USER:Usuarios *

RAKK
źródło
1

Żadne z nich (chmod / chown / icacls / setacl / copyacls / explorer> security) nie działało na moim cygwin64 / win7 / admin, w końcu to działa z cygwin64/ssh -F ~/.ssh/configinnymi rozwiązaniami, aby używać starszego ssh w cygwin32 lub ssh w git dla Windows.

mosh
źródło
Użycie -Frozwiąże problem config, ale nie rozwiąże uprawnień dla kluczy prywatnych.
Jari Turkia
0

Dla tych, którzy używają noaclścieżki z ~/.sshdir, prostym rozwiązaniem jest utworzenie natywnego łącza symbolicznego NTFS:

cmd# mklink c:\home\.ssh c:\opt\cygwin\home\misc\.ssh
symbolic link created for c:\home\.ssh <<===>> c:\opt\cygwin\home\misc\.ssh

Ze noaclnie ma sposobu, aby ustawić uprawnienia inne następnie rwxr-xr-xalbo rw-r--r--. Ponieważ /hierarchia powinna być bez noacl(lub powinna być z acl), możesz tutaj utworzyć katalog i wskazać na problematyczne miejsca dla aplikacji Cygwin.

gavenkoa
źródło
1
Biorąc pod uwagę, że jest to katalog, prostym rozwiązaniem byłoby użycie skrzyżowania, ponieważ nie wymaga to uprawnień wymaganych do ustawienia dowiązania symbolicznego. To byłoby mklink /jwtedy lub junctionnarzędzie z Sysinternals Suite.
0xC0000022L
0

tldr: Możliwe, że utworzyłeś konfigurację jako administrator

Rozwiązanie

Rozwiązania te mogą być przesadne, jeśli nie udało Ci się utworzyć pliku jako administrator i próbować użyć pliku z lokalnymi uprawnieniami.

  • Skopiuj zawartość konfiguracji ssh
  • Usuń plik
  • Otwórz nową powłokę (lokalna - nieadministracyjna)
  • Przejdź do ścieżki, w której przechowywana jest konfiguracja ( zwykle ~/.sshw programie PowerShell lub %userprofile%\.sshw cmd )
  • Biegać notepad .\config

Proste polecenia (PowerShell):

$sshPath = '~/.ssh/config'
$content = cat $sshPath
# In case the line above fails, this check will prevent your current config to get deleted
if ($content) {
  rm $sshPath
  $content | Out-File -en ascii $sshPath
}
AP.
źródło