ssh meminta kata sandi meskipun ssh-copy-id

28

Saya telah menggunakan otentikasi kunci publik pada server jarak jauh untuk beberapa waktu sekarang untuk penggunaan shell jarak jauh serta untuk sshfs mounts. Setelah memaksa umount direktori sshfs saya, saya perhatikan bahwa ssh mulai meminta saya untuk kata sandi. Saya mencoba membersihkan remote .ssh / official_keys dari sembarang menyebutkan mesin lokal, dan saya membersihkan mesin lokal dari referensi ke mesin remote. Saya kemudian mengulangi ssh-copy-id saya, meminta kata sandi, dan kembali dengan normal. Tapi lihat, ketika saya ssh ke server jauh saya masih dimintai kata sandi. Saya agak bingung tentang apa masalahnya, ada saran?

Aliud Alius
sumber
1
serverfault.com/questions/208181/... Saya tidak yakin apa kebijakan StackExchange di duplikat di situs ini, tetapi tampaknya tidak saya bahwa cross-posting pertanyaan akan sangat membantu.
ephemient
Jika Anda telah memeriksa bahwa hanya Anda yang dapat menulis ~, ~/.sshdan ~/.ssh/authorized_keys, jalankan ssh -vvv server.example.comdan laporkan hasilnya (anonimkan nama host dan pengguna jika Anda mau). Jika Anda memiliki akses root di server, lihat entri log yang dibuat ketika Anda mencoba login kunci publik.
Gilles 'SANGAT berhenti menjadi jahat'

Jawaban:

32

sshd menjadi aneh tentang izin pada $ HOME, $ HOME / .ssh (kedua direktori) dan $ HOME / .ssh / official_keys.

Salah satu kotak linux saya berakhir dengan izin drwxrwxrwx pada direktori $ HOME saya. Kotak Arch linux benar-benar tidak akan masuk menggunakan kunci publik sampai saya menghapus izin 'w' untuk grup, lain pada direktori $ HOME saya.

Coba buat $ HOME dan $ HOME / .ssh / punya izin yang lebih ketat untuk grup dan lainnya. Lihat apakah itu tidak memungkinkan sshd melakukan tugasnya.

Bruce Ediger
sumber
4
Ya. ssh-copy-idseharusnya mengurus izin ~/.sshdan ~/.ssh/authorized_keys, tetapi juga memastikan bahwa direktori home Anda sendiri tidak dapat ditulis kelompok.
Gilles 'SANGAT berhenti menjadi jahat'
7
Ini dia, untukku. Saya menggunakan ssh-copy-id untuk mengirim kunci RSA, dan saya masih diminta. Berjalan chmod g-w homedirdi server jauh bekerja seperti pesona.
Ben Kreeger
9

Diperlukan izin berikut:

  • The .sshfolder:700 (drwx------)
  • Kunci publik: 644 (-rw-r--r--)
  • Kunci pribadi: 600 (-rw-------)
Sagar Naik
sumber
5

Saya baru-baru ini mengalami masalah ini juga.

Itu dikoreksi dengan memodifikasi izin $HOMEdirektori. Namun, menjalankan chmod g-w ~/saja tidak memperbaiki masalah. Selain itu chmod g-w ~/saya juga perlu memodifikasi izin otherspada $HOMEdirektori dengan menjalankanchmod o-wx ~/

Bersama:

chmod g-w ~/
chmod o-wx ~/

Harap dicatat bahwa saya tidak yakin jika o-xperlu, saya hanya menjalankannya sebagai tindakan pencegahan.

izzy.artistic
sumber
1

Mengubah izin untuk folder ~ / .ssh menyelesaikan masalah saya sesuai dengan posting ini di Super User SE .

Dogukan
sumber
0

Apakah masalah terjadi juga pada login paralel, yaitu jika Anda mencoba me-mount sshfs saat sesi ssh terbuka? Jika tidak, maka saya kira Anda memiliki direktori rumah Anda terenkripsi? Dalam hal ini $HOME/.ssh/authorized_keyshanya akan dapat digunakan pada mesin jarak jauh setelah login pertama Anda (menggunakan kata sandi Anda).

Lihat https://help.ubuntu.com/community/SSH/OpenSSH/Keys#Pemecahan masalah untuk penjelasan dan solusi yang diperlukan.

fheub
sumber
0

Saya akan memposting ini sebagai komentar, tetapi mungkin terlalu lama. Saya hanya ingin menambahkan yang ssh-copy-idmencoba mengirim kunci publik dari /.sshlokasi di dalam $HOMEfolder Anda .

Jika Anda mencoba melakukan sshroot dengan kunci publik (simpan komentar terkait keamanan), ssh-copy-idbisa mencoba masuk dengan kunci publik yang salah jika $HOMEvariabel Anda disetel ke hal lain selain /root(seperti disetel ke direktori home pengguna normal pengguna Anda) ), sehingga pengguna root akan diminta karena kunci publik root tidak diinstal pada sistem jarak jauh.

Anda dapat menggunakan satu-liner berikut untuk menentukan kunci publik yang tepat:

pub="$(cat /root/.ssh/id_rsa.pub)"; ssh user@remotehost "echo $pub >> .ssh/authorized_keys; chmod 700 .ssh; chmod 600 .ssh/authorized_keys"

Saya telah mengalami skenario ini di alam liar beberapa kali (termasuk pagi ini) dan berpikir saya akan mencoba untuk memasukkan 2 sen saya, kalau-kalau ada orang menemukan diri mereka dalam situasi yang sama.

rubynorails
sumber
0

Seperti kontributor lain yang disebutkan, ini mungkin masalah izin.

Cara terbaik mendiagnosis ini adalah me-restart daemon SSH pada server jauh dengan opsi debug on - biasanya opsi "-d". Pesan daemon OpenSSH sangat eksplisit. Misalnya, Anda akan melihat pesan seperti:

Authentication refused: bad ownership or modes for directory /some/path
gerard lapeche
sumber
Saya tidak akan menyebut pesan itu "sangat eksplisit". Ini memberi tahu Anda dengan sangat samar apa yang seharusnya Anda cari (kepemilikan dan izin yang salah), tetapi tidak memberi tahu Anda direktori atau file mana yang harus diperiksa, atau pengaturan yang benar.
Urhixidur
0

Alasan kunci publik tidak bertahan pasca reboot adalah karena direktori home server saya dienkripsi. (Anda melakukan ini saat menginstal server)

dinbo
sumber
0

Masalah lain yang mungkin terjadi adalah server tidak mendukung algoritma kunci Anda. Dalam kasus saya, saya menemukan pesan berikut di sshdlog saya ( /var/log/auth.logdalam kasus saya):

userauth_pubkey: unsupported public key algorithm: ssh-ed25519 [preauth]

Jika itu masalahnya, Anda harus mengaktifkan dukungan untuk algoritme itu dalam sshdkonfigurasi Anda (yang mungkin memerlukan pembaruan ke versi yang lebih baru sshd) atau Anda perlu mengalihkan kunci ke algoritma yang didukung oleh sshdAnda mencoba menyambung ke .

Florian Brucker
sumber
0

Karena pertanyaan ini muncul di antara hasil pencarian pertama saat mencari perilaku ini di Google, saya juga akan menambahkan solusi saya:

Dalam kasus saya itu tidak ada hubungannya dengan izin. Untuk alasan apa pun (tidak repot-repot mencari tahu untuk alasan apa sebenarnya, ketika saya menemukan perbaikan cepat) ketika menjalankan perintah ssh, program tidak mencari file identitas yang tepat. Salah satu solusinya adalah menambahkan secara manual pada server jauh kunci SSH yang coba digunakan oleh program SSH. Anda dapat mengamati apa yang dilakukan program SSH ketika menjalankan perintah dengan menambahkan -v pada perintah:

ssh -v username@your-host-ip-or-domain 

Kemudian Anda tinggal mengambil di mesin lokal Anda sembarang kunci publik yang untuknya program SSH mencoba menemukan file identitas / kunci privat, pada Mac misalnya:

cat ~/.ssh/id_rsa.pub

... dan tambahkan ke file otor_keys remote di:

~/.ssh/authorized_keys

Lain, dalam kasus saya solusi yang lebih baik adalah menambahkan host kustom di file konfigurasi ssh lokal saya. Di Mac saya itu adalah:

/Users/my-user-name/.ssh/config

Di sini Anda dapat menambahkan misalnya sesuatu seperti ini:

Host mynewserver
        HostName some.IP.number.or.domain
        Port 20000 #if custom port is used and not the default 22
        User the_root
        PreferredAuthentications publickey
        IdentityFile ~/.ssh/id_rsa_for_my_new_server

Maka Anda hanya perlu menjalankan:

ssh mynewserver

... dan Voa

Schurik
sumber