Authority_keys'e ortak anahtar eklenmiş olsa bile ssh olamaz


16

Kendime ssh erişimi vermeye çalıştığım bir Dijital Okyanus damlacık var. Daha önce ne yapıldığından emin değilim. Genel anahtarımı Digital Ocean UI aracılığıyla eklemeyi denedim. Bu işe yaramadı, almaya devam ettim permission denied (publickey).

Sunucuya Dijital okyanus konsolu üzerinden eriştim ve ortak anahtarımı manuel olarak ekledim /root/.ssh/authorized_keys. Daha sonra kullanarak ssh denedim ssh root@x.x.x.x. Bu işe yaramadı (izin reddedildi).

Ben yeni kullanıcı ekleme çalıştı Yani, yaratılan /home/me/.sshizinlerine sahip dizini 700üzerinde .sshdizininin kendisi ve 600üzerinde authorized_keysdosyaya. Sonra denedim ssh me@x.x.x.x. Bu da işe yaramadı.

Ssh arka plan programının yeniden başlatılması da hiçbir şeyi değiştirmez.

Neyi kaçırıyorum?

Düzenle:

İşte ayrıntılı ssh çıktısı.

https://gist.github.com/jaesung2061/a37cfd68308414cede8abf7f0137daa9

Düzenleme 2:

LogLevel DEBUG3 çıktı:

resim açıklamasını buraya girin


Bağlantıdan ayrıntılı günlüğü, sshd_config içeriğinizi ve ssh ile ilgili olası hataları sunucu günlüğüne gönderin.
Jakuje

@ Jakuje Çıktıyı ekledim ... Yorumunuzu daha önce fark etmedim.
Jeff

Anahtar reddedildi. Olası sorunlar için sunucu günlüğüne bakın (muhtemelen LogLevel DEBUG3in ile sshd_config). Bunların izin sorunları olduğundan şüpheleniyorum, ancak bunun birkaç nedeni olabilir.
Jakuje

Öyle diyor[date omitted] www sssh[15029]: Connection closed by x.x.x.x port 55519 [preauth]
Jeff

Authority_keys dosyasının izinleri nelerdir? ls -ld ~ ~/.ssh ~/.ssh/authorized_keys? Sunucudaki ayrıntılı günlük için yukarıda belirtilen dosyayı değiştirin, ssh hizmetini yeniden başlatın, tekrar bağlanın ve günlüğü gönderin (ayrıca olmalıdır auth.log.
Jakuje

Yanıtlar:


20

İstemci Yapılandırması

Kurmak ~/.ssh/config

Ana bilgisayar girişlerini ayarlamak sshgerçekten kolaydır ve size çok fazla sorun kazandıracaktır. İşte bir örnek:

Host digitaloceanbox
Hostname 111.111.111.111
User root
PubKeyAuthentication yes
IdentityFile /home/user/.ssh/digitalocean-rsa
ForwardX11 yes


Host github github.com
Hostname github.com
User git
PubKeyAuthentication yes
IdentityFile /home/user/.ssh/github-rsa
ForwardX11 no

Bu örnek, biz kurulumunda digitaloceanboxve githubve github.combu nedenle aşağıdaki komutları yapabileceği:

  1. ssh github
  2. ssh digitaloceanbox

Eğer yapılandırma dosyasında belirtilenden farklı bir kullanıcı olarak giriş yapmak istiyorsak, en başa koyuyoruz user@:

  • ssh user@digitaloceanbox

Yaratma sshtuşları

ssh-keygen -t rsa -b 4096 -C user@homemachine
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):  /home/user/.ssh/digitalocean-rsa
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/user/.ssh/digitalocean-rsa
Your public key has been saved in /home/user/.ssh/digitalocean-rsa.pub.
The key fingerprint is:
SHA256:p9PYE/tveF2n//bLbp3ogYDtMtYEC5ziQiPxeob6fbo user@homemachine

İstendiğinde oluşturmak istediğim özel anahtarın tam yolunu belirlediğimi unutmayın ssh-keygen. Ayrıca -C, uzak makinelerde anahtarları kolayca tanımamı sağlayan comment ( ) yöntemini de tanımladım .

Bu iki dosya oluşturur:

  1. .ssh/digitalocean-rsa
    • ÖZEL tuşu. Bunu asla paylaşmayın .
  2. .ssh/digitalocean-rsa.pub
    • Genel anahtar. Kimlik doğrulaması için sunucuda depoladığınız şey budur.

Eğer sağladığınızda sshanahtarı, bu kadar emin olun .pubversiyonu !! Kime eklediğinizde ~/.ssh/config, sisteme eklediğiniz genel anahtarla eşleşen doğru özel anahtarı eklediğinizden emin olun.


Sunucu Yapılandırması

Çoğu kurulum Ortak Anahtar Kimlik Doğrulaması etkinken gelir. Her şeyi kötü yapmaya başlarsanız, birkaç sorunla karşılaşabilirsiniz. OP sorununda nerede, OP /root/.ssh/baştan başlamak için dizini silmenizi öneririz .

sshUzaktaki sistemdeki kök kullanıcıya erişmek için kullanmanız önerilmez . sshBaşka bir kullanıcıya girmeniz ve ardından şifrenizi ( sudo su -) kullanarak kök dizine yükseltmeniz önerilir .

Kullanarak ana bilgisayara anahtarlar ekleyin ssh-copy-id

Başka bir kullanıcı oluşturmaya ve sshbu kullanıcı ya da kök kullanıcı olarak kullanmaya karar vermenizden bağımsız olarak, sshanahtarları sunucuya yerleştirmenin önerilen yolu şudur :

  1. ssh-copy-id -i /home/user/.ssh/digitalocean-rsa.pub user@digitaloceanbox

Bu, sshdgerekli izinlerle dizin ve dosyaların oluşturulmasına izin verir . Bu, izinleri bozmanız veya ayrıntıları hatırlamanızın sıfır şansı olduğu anlamına gelir. Anahtarları yüklemek için aracı kullanmanız yeterlidir.

Parola Kimlik Doğrulamasını Devre Dışı Bırak

Bununla birlikte, kendinizi anahtarladıktan ve anahtarları kullanarak bağlanabildiğinizi doğruladıktan sonra, Parola Kimlik Doğrulamasını devre dışı bırakmanız sshdve hizmeti yeniden başlatmanız önerilir :

  1. Düzenle /etc/ssh/sshd_config
  2. PasswordAuthentication no
  3. sudo systemctl restart sshd

Yeni kullanıcılar ne olacak?

Parola Kimlik Doğrulamasını devre dışı bırakırsanız, yeni kullanıcıları nasıl anahtarlayabilirsiniz? Bunun bir yolu /etc/skeldizine şablon dosyaları eklemektir . Bir kullanıcıyı anahtarladıktan sonra aşağıdakileri yapın:

  1. sudo cp -r .ssh/ /etc/skel/
  2. ls /etc/skel/.ssh
  3. /etc/skel/.ssh/Kendinizi yeni oluşturulan her kullanıcı için otomatik olarak anahtarlamak istemiyorsanız, bulunan dosyaları boş olacak şekilde düzenleyin.

Birlikte yeni kullanıcılar oluşturduğunuzda sudo useradd -m newuser, söz konusu kullanıcı .ssh/authorized_keys, düzenleyebileceğiniz ve uygun izinlere sahip olacak.

Hata ayıklama

sshdBağlantıların neden başarısız olduğunu veya reddedildiğini görmek için günlük dosyasını izleyebilirsiniz :

  1. sudo tail -f /var/log/auth.log

Bu komutu çalıştırırken, oturum açmayı denemek için başka bir terminal kullanın. Çoğu kez sağlanan mesajlar sorunu saptamaya veya çevrimiçi bir çözüm bulmaya yardımcı olacak kadar iyidir.


1
Hata ayıklama adımı benim için çalıştı. Kök dizinin yanlış izinleri vardı (700 olması gerekiyordu)
naisanza

12

Ssh, ssh anahtarlarıyla sahiplik, dosya ve dizin izinleri konusunda oldukça seçici.

~ / .ssh / sahibine ait olmalı ve 700 izne sahip olmalıdır. ~ / .ssh / yetkili_anahtarları sahibine ait olmalı ve 600 izne sahip olmalıdır.

Yani, kök için:

sudo chown root:root -R /root/.ssh/
sudo chmod 700 /root/.ssh/
sudo chmod 600 /root/.ssh/authorized_keys

Kullanıcı için:

sudo chown me:me -R /home/me/
sudo chmod 700 /home/me/.ssh/
sudo chmod 600 /home/me/.ssh/authorized_keys

Ve sonra tekrar deneyin.

Tabii ki / etc / ssh / sshd_config dosyasında root'un oturum açmaya izin verilip verilmediğini veya sadece ssh tuşlarıyla da kontrol edilmelidir.

Eğer varsa:

PasswordAuthentication no

o zaman ayarlayabilirsiniz:

PermitRootLogin yes

Ve sonra sshd'yi yeniden başlatın:

/etc/init.d/sshd restart

ve yeniden dene.

Ssh ile, sshd arka plan programının bunun için bir ssh oturumu kullanıldığında bile yeniden başlatılabileceğini unutmayın.Openssh bununla başa çıkmak için tasarlanmıştır.

Yüklenen günlük dosyası snippet'lerinize baktığımızda MacOSX kullandığınız anlaşılıyor mu? Orada yeni bir ssh anahtarı oluşturabilir misiniz?

Dahası, geçmişte öğrendim ki kullanıcı için yerel bilgisayarımda birden fazla özel ssh anahtarım olduğunda, bunun bazen ssh ile uzaktan oturum açmayı imkansız hale getirdiğini öğrendim. Bunu çözmek için ~ / .ssh / config dosyasındaki yerel bilgisayarda girişler yapmak çok yardımcı oldu. Örneğin :

Host my-vps
  HostName my-vps-ip-address-here
  IdentityFile ~/.ssh/id_rsa-my-private-key-location
  User my-username-here

Bundan sonra yerel bilgisayarınızdaki komut satırını deneyin:

ssh -v my-vps

Ssh anahtarlarının yanı sıra diğer bazı girişler için ssh anahtarları kullanmadan, ssh anahtarlı girişlerin yanı sıra ~ / ssh / config dosyasında ssh anahtarı kullanımı olmayan bir ssh oturum açma tanımlayabilirsiniz, örneğin:

Host pi
  Hostname 192.168.1.111
  Port 22
  User pi
  PasswordAuthentication yes
  PreferredAuthentications password

Bu benim için iyi çalışıyor. Komut satırında hangi tuşun kullanılacağını tanımlamak da mümkündür:

ssh -v root@10.111.111.254 -i .ssh/id_rsa

Bu hata ayıklamayı kolaylaştırabilir ve komut satırında bu her zaman yerel bilgisayarda çalışmalıdır.


Bu çözüme ek olarak, SSH'nin çalışması için ana klasörümün izinlerini de değiştirmek zorunda kaldım:sudo chmod 700 /home/me/
Rg90

Sen bir hayat kurtarıcısın, @ albert-j! IdentityFileÇizgi bir saat süren rut bana çıktı.
zev

4

Ssh daemon yapılandırmasını iki kez kontrol edin (içinde olması gerekir /etc/ssh/sshd_config) ve şunları kontrol edin:

PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys

Ayrıca , kullanıcı ve gruplar için sırasıyla beyaz listeler olarak işlev gördükleri için AllowUsers veya AllowGroups öğelerinin ayarlanıp ayarlanmadığını görmek için yapılandırma dosyasını kontrol edin .

Ayrıca, kök kullanıcıya bir anahtar eklemeye çalıştığınızı fark ettim. Varsayılan olarak kök girişinin devre dışı bırakılması gerekir, ancak bunu PermitRootLogin alanından da değiştirebilirsiniz .


Bunların hiçbiri çalışmıyor: / Hala alıyorumPermission denied (publickey)
Jeff

3

Bağladığınız günlüklere göre, istemci tarafında özel anahtar dosyasını bulmada sorunlarınız olduğunu düşünüyorum .

  • Öncelikle dosyanın ~/.ssh/id_rsayerel makinenizde var olduğunu ve doğru dosya olduğunu kontrol edin _ (daha fazlasına sahipseniz).

  • Kontrol .sshklasör izinlerini (olmalıdır drwx------çalışmaz ise, sudo chmod 700 ~/.ssh) ve içeriği (olmalıdır -rw-------çalışmaz ise, sudo chmod 600 ~/.ssh/*) . Uzak makine için de aynı izinleri uygulayın.

Ayrıca, istediğiniz kullanarak zorlamayı deneyebilirsiniz özel anahtarı , doğrudan verilmesi sshile -iparametre.

  • Aşağıdaki gibi bir şey çalıştırabilirsiniz:

    ssh -i /path/to/your/private-key root@X.X.X.X

    veya

    ssh -i ~/.ssh/id_rsa myRemoteUser@X.X.X.X

Ssh manpage hakkında daha fazla bilgi alabilirsiniz ( man sshterminalinizde çalıştırın ) .

Ayrıca, rootkullanıcı olarak oturum açmak istiyorsanız , root hesabınızın oturum açmadan önce etkinleştirilmesi, bununla birlikte bir passwd sudo passwd rootveya sunucu yönetim aracınızın (Ubutntu'nun kök hesabı varsayılan olarak devre dışı bırakılmış olması gerekir) unutmayın . Ubuntu Wiki'den daha fazla bilgi alabilirsiniz .

Umarım yardımcı olur.


3

openssh-serverSorunu gideren yeniden yüklemeyi tamamladım. Verilen çözümlerin hepsi harika, ama benim için çalışmadılar. Soruna neden olan hiçbir fikrim yok, ancak önceki geliştiricinin yapılandırmayı bozmuş olabileceğini ve işleri oldukça kötü karıştırdığını düşünüyorum.

Benimki gibi özel bir sorunu olan herkes olacağından şüpheliyim. Bununla birlikte, bir Dijital Okyanus damlacınız varsa, SSH erişimine sahip olamazsınız ve verilen çözümlerin hiçbiri işe yaramazsa, bu komutları Digital Ocean konsolu üzerinden çalıştırarak SSH sunucusunu yeniden yükleyin. Bunun yıkıcı bir işlem olduğuna dikkat edin ve eski yapılandırma dosyalarını/etc/ssh/ ( .sshdizininizde değil ) siler .

apt-get purge openssh-server
apt-get autoremove
apt-get autoclean
apt-get install openssh-server

Ssh istemcinizin / anahtarlarınızın uygun olduğunu varsayarsak, sunucunuza SSH yapabilmeniz gerekir.


1

Bu sorun benim için Digital Ocean'daki Debian imajını kullanarak ortaya çıktı. Bir şekilde kısa kurulum işlemi sırasında, muhtemelen kök parolayı ayarladığımda, sahibinin /rootkullanıcısı değiştirildi debian. Aşağıdakileri gördüm /var/log/auth.log:

Jul 26 20:58:17 docker sshd[12576]: Authentication refused: bad ownership or modes for directory /root

Sadece yürütmek chown root:root -R /rootsorunu çözdü.

HTH


0

Çok benzer bir sorun yaşadım. Bu benim için çalıştı - Bu satırı / etc / ssh / sshd_config dizinine ekle

AuthorizedKeysFile %h/.ssh/authorized_keys 

Sonra ssh'ı her zamanki gibi yeniden başlatın.

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.