Tidak dapat ssh bahkan dengan kunci publik ditambahkan ke otor_keys

15

Saya memiliki tetesan Samudra Digital yang saya coba beri akses ssh sendiri. Saya tidak yakin apa yang dilakukan sebelumnya. Saya sudah mencoba menambahkan kunci publik saya melalui Digital Ocean UI. Itu tidak berhasil, saya terus mendapatkan permission denied (publickey).

Saya mengakses server melalui konsol lautan Digital dan secara manual menambahkan kunci publik saya ke /root/.ssh/authorized_keys. Saya kemudian mencoba ssh menggunakan ssh [email protected]. Itu tidak berhasil (izin ditolak).

Jadi saya mencoba menambahkan pengguna baru, membuat /home/me/.sshdirektori dengan izin 700pada .sshdirektori itu sendiri, dan 600pada authorized_keysfile tersebut. Lalu saya mencoba ssh [email protected]. Itu juga tidak berhasil.

Restart daemon ssh juga tidak mengubah apa pun.

Apa yang saya lewatkan?

Edit:

Berikut ini adalah keluaran ssh verbose.

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

Edit 2:

LogLevel DEBUG3 keluaran:

masukkan deskripsi gambar di sini

Jeff
sumber
Posting log verbose dari koneksi, konten sshd_config Anda dan kemungkinan kesalahan yang terkait dengan ssh di log server.
Jakuje
@ Jakuje Saya telah menambahkan hasilnya ... Saya tidak melihat komentar Anda sebelumnya.
Jeff
Kuncinya ditolak. Periksa log server untuk kemungkinan masalah (mungkin dengan LogLevel DEBUG3masuk sshd_config). Saya menduga ini adalah masalah izin, tetapi mungkin ada beberapa alasan untuk ini.
Jakuje
Dikatakan[date omitted] www sssh[15029]: Connection closed by x.x.x.x port 55519 [preauth]
Jeff
Apa izin file yang diotorisasi? ls -ld ~ ~/.ssh ~/.ssh/authorized_keys? Untuk verbose log dari server, modifikasi file yang disebutkan di atas, restart layanan ssh, sambungkan kembali dan posting log (harus juga masuk auth.log.
Jakuje

Jawaban:

19

Konfigurasi Klien

Mempersiapkan ~/.ssh/config

Menyiapkan entri host sshsangat mudah dan akan menghemat banyak masalah. Berikut ini sebuah contoh:

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

Dalam contoh ini, kami mengatur digitaloceanboxdan githubdan github.comagar kami dapat melakukan perintah berikut:

  1. ssh github
  2. ssh digitaloceanbox

Jika kami ingin masuk sebagai pengguna yang berbeda dari yang ditentukan dalam file konfigurasi, kami hanya meletakkan user@di awal:

  • ssh user@digitaloceanbox

Membuat sshkunci

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

Perhatikan bahwa saya telah menentukan path lengkap kunci pribadi yang ingin saya hasilkan ketika diminta oleh ssh-keygen. Saya juga mendefinisikan komentar ( -C) yang memungkinkan saya untuk dengan mudah mengidentifikasi kunci pada mesin jarak jauh.

Ini akan membuat dua file:

  1. .ssh/digitalocean-rsa
    • Kunci PRIVATE . Jangan pernah berbagi ini .
  2. .ssh/digitalocean-rsa.pub
    • Kunci publik. Ini yang Anda simpan di server untuk otentikasi.

Ketika Anda memberikan sshkunci Anda , pastikan itu .pubversinya !! Ketika Anda menambahkan ke Anda ~/.ssh/config, pastikan untuk menambahkan kunci pribadi yang benar yang cocok dengan kunci publik yang Anda tambahkan ke sistem.


Konfigurasi Server

Sebagian besar instalasi akan datang dengan Otentikasi Kunci Publik diaktifkan. Namun, jika Anda mulai melakukan semua hal dengan sendirinya, Anda mungkin akan mengalami beberapa masalah. Di tempat OP berada dalam masalah mereka, saya sarankan OP menghapus /root/.ssh/direktori untuk memulai kembali.

Anda tidak disarankan sshuntuk mengakses pengguna root di sistem jarak jauh. Dianjurkan agar Anda sshmenjadi pengguna lain, dan kemudian naik ke root menggunakan kata sandi Anda ( sudo su -).

Tambahkan kunci ke host menggunakan ssh-copy-id

Terlepas dari apakah Anda memutuskan untuk membuat pengguna lain dan menggunakan sshsebagai pengguna itu, atau pengguna root, berikut ini adalah cara yang disarankan untuk menempatkan sshkunci di server:

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

Ini memungkinkan sshduntuk membuat direktori dan file yang dibutuhkan dengan izin yang diperlukan. Ini berarti tidak ada peluang bagi Anda untuk mengacaukan izin atau perlu mengingat detailnya. Cukup gunakan alat untuk mengunggah kunci.

Nonaktifkan Otentikasi Kata Sandi

Yang sedang berkata, setelah Anda memiliki kunci sendiri dan memverifikasi bahwa Anda dapat terhubung menggunakan kunci, disarankan agar Anda menonaktifkan Otentikasi Kata Sandi di sshddan memulai kembali layanan:

  1. Edit /etc/ssh/sshd_config
  2. PasswordAuthentication no
  3. sudo systemctl restart sshd

Bagaimana dengan pengguna baru?

Jika Anda menonaktifkan Otentikasi Kata Sandi, bagaimana Anda dapat memasukkan pengguna baru? Salah satu caranya adalah dengan menambahkan file template ke /etc/skeldirektori. Setelah Anda mengetikkan satu pengguna, lakukan hal berikut:

  1. sudo cp -r .ssh/ /etc/skel/
  2. ls /etc/skel/.ssh
  3. Edit semua file yang ditemukan /etc/skel/.ssh/sehingga kosong, kecuali jika Anda ingin memasukkan sendiri secara otomatis untuk setiap pengguna yang baru dibuat.

Saat Anda membuat pengguna baru sudo useradd -m newuser, pengguna itu akan memiliki .ssh/authorized_keys, yang dapat Anda edit dan akan memiliki izin yang tepat.

Debugging

Anda dapat menonton sshdfile log untuk melihat mengapa koneksi gagal atau ditolak:

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

Saat Anda menjalankan perintah ini, gunakan terminal lain untuk mencoba login. Sering kali pesan yang diberikan cukup baik untuk membantu menunjukkan masalah, atau menemukan solusi online.

earthmeLon
sumber
1
Langkah debugging berhasil untuk saya. Direktori root memiliki izin yang salah (harus 700)
naisanza
12

Ssh cukup pilih-pilih tentang hak kepemilikan, file dan direktori dengan kunci ssh.

~ / .ssh / harus dimiliki oleh pemilik dan memiliki 700 izin. ~ / .ssh / official_keys harus dimiliki oleh pemilik dan memiliki 600 izin.

Jadi, untuk root:

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

Untuk pengguna saya:

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

Lalu coba lagi.

Tentu saja Anda juga harus memeriksa / etc / ssh / sshd_config apakah root diizinkan untuk masuk, atau hanya dengan kunci ssh.

Jika Anda memiliki :

PasswordAuthentication no

maka Anda dapat mengatur:

PermitRootLogin yes

Dan kemudian restart sshd:

/etc/init.d/sshd restart

dan coba lagi.

Perhatikan bahwa dengan ssh, daemon sshd dapat dimulai ulang bahkan ketika menggunakan sesi ssh untuk ini. Opshsh dirancang untuk menghadapinya.

Melihat potongan file log yang Anda unggah, tampaknya Anda menggunakan MacOSX? Bisakah Anda membuat kunci ssh baru di sana?

Selain itu, saya mengetahui di masa lalu bahwa ketika saya memiliki lebih dari satu kunci ssh pribadi di komputer lokal saya untuk pengguna saya, bahwa ini kadang-kadang membuat tidak mungkin untuk login jarak jauh dengan ssh. Sangat membantu banyak untuk membuat entri pada komputer lokal di file ~ / .ssh / config, untuk menyelesaikannya. Sebagai contoh :

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

Setelah itu coba di baris perintah di komputer lokal Anda:

ssh -v my-vps

Saat menggunakan kunci ssh, dan juga tidak ada kunci ssh untuk beberapa login lain, Anda dapat, selain entri dengan kunci ssh, juga menentukan login ssh tanpa penggunaan kunci ssh dalam file ~ / ssh / config, misalnya:

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

Ini berfungsi baik untuk saya. Dimungkinkan juga untuk menentukan kunci mana yang digunakan pada baris perintah:

ssh -v [email protected] -i .ssh/id_rsa

Ini mungkin membuat debugging lebih mudah, dan pada baris perintah ini harus selalu berfungsi di komputer lokal.

albert j
sumber
Selain solusi ini, saya harus mengubah izin untuk folder rumah saya juga, agar SSH berfungsi:sudo chmod 700 /home/me/
Rg90
Anda seorang penyelamat, @ albert-j! The IdentityFilegaris membuat saya keluar dari kebiasaan selama satu jam.
zev
4

Periksa kembali konfigurasi ssh daemon (harus ada di /etc/ssh/sshd_config) dan periksa untuk:

PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys

Juga periksa file konfigurasi untuk melihat apakah AllowUsers atau AllowGroups telah ditetapkan, karena mereka bertindak sebagai daftar putih untuk pengguna dan grup masing-masing.

Juga, saya perhatikan Anda mencoba menambahkan kunci ke pengguna root. Secara default login root harus dinonaktifkan, tetapi Anda juga dapat mengubahnya melalui bidang PermitRootLogin .

TLin
sumber
Tak satu pun dari ini bekerja: / Saya masih mendapatkanPermission denied (publickey)
Jeff
3

Menurut log yang telah Anda tautkan, saya pikir Anda memiliki masalah di sisi klien tidak menemukan file kunci pribadi .

  • Pertama periksa file ~/.ssh/id_rsaada di mesin lokal Anda, dan apakah yang benar _ (jika Anda memiliki lebih banyak).

  • Periksa .sshizin folder (harus drwx------, jika tidak dijalankan sudo chmod 700 ~/.ssh) dan isinya (harus -rw-------, jika tidak dijalankan sudo chmod 600 ~/.ssh/*) . Terapkan izin yang sama untuk mesin jarak jauh juga.

Selain itu, Anda dapat mencoba memaksa menggunakan kunci pribadi yang Anda inginkan , memberikannya langsung sshdengan -iparameter.

Anda bisa mendapatkan lebih banyak info tentang ssh manpage (jalankan man sshdi terminal Anda) .

Juga perlu diingat jika Anda ingin login sebagai rootpengguna, akun root Anda harus diaktifkan sebelum login, membuat passwd untuknya dengan sudo passwd rootatau alat administrasi server Anda (Ubutntu memiliki akun root dinonaktifkan secara default) . Anda bisa mendapatkan info lebih lanjut di Wiki Ubuntu .

Semoga ini bisa membantu.

dgonzalez
sumber
3

Saya akhirnya menginstal ulang openssh-server yang memperbaiki masalah ini. Solusi yang diberikan semuanya hebat, tetapi mereka tidak berhasil untuk saya. Saya tidak tahu apa yang menyebabkan masalah ini, tetapi saya pikir pengembang sebelumnya mungkin telah mengacaukan konfigurasi dan mengacaukan semuanya dengan sangat buruk.

Saya ragu akan ada orang dengan masalah spesifik seperti milik saya. Namun, jika Anda memiliki tetesan Digital Ocean, Anda tidak bisa mendapatkan akses SSH, dan tidak ada solusi yang berhasil, instal ulang server SSH dengan menjalankan perintah ini melalui konsol Digital Ocean. Hati-hati ini adalah proses yang merusak dan akan menghapus file konfigurasi lama/etc/ssh/ (bukan .sshdirektori Anda ).

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

Dengan asumsi klien / kunci ssh Anda dalam keadaan teratur, Anda harus dapat SSH ke server Anda.

Jeff
sumber
1

Masalah ini muncul bagi saya menggunakan gambar Debian di Digital Ocean. Entah bagaimana selama proses pengaturan singkat, mungkin ketika saya mengatur kata sandi root, pemilik untuk /rootdiubah menjadi pengguna debian. Saya melihat hal berikut di /var/log/auth.log:

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

Hanya menjalankan chown root:root -R /rootmenyelesaikan masalah.

HTH

Sean Brady
sumber
0

Baru saja mengalami masalah yang sangat mirip. Ini berfungsi untuk saya - Tambahkan baris ini ke / etc / ssh / sshd_config

AuthorizedKeysFile %h/.ssh/authorized_keys 

Kemudian restart ssh dengan cara biasa.

bodycheetah
sumber