Saya bekerja dari URL yang saya temukan di sini:
Klien ssh saya adalah Ubuntu 64 bit 11.10 desktop dan server saya adalah Centos 6.2 64 bit. Saya telah mengikuti petunjuknya. Saya masih mendapatkan prompt kata sandi di ssh.
Saya tidak yakin apa yang harus saya lakukan selanjutnya.
ssh
key-authentication
Thom
sumber
sumber
chmod 700
/var/log/auth.log
akan memberi tahu Anda mengapa login gagal./var/log/secure
.0700
adalah jawabannya, tetapi ketika saya melakukannyassh -v
di sisi klien, itu tidak menunjukkan kesalahan terkait mengapa kunci tidak diterima, itu hanya mengatakan sedang mencoba kata sandi berikutnya meskipun klien saya mengirim kunci publik. Bagaimana mereka mengharapkan kami untuk mendiagnosis masalah tanpa informasi kesalahan dari server?Jawaban:
Pastikan izin pada
~/.ssh
direktori dan isinya tepat. Ketika saya pertama kali mengatur kunci ssh auth, saya tidak memiliki~/.ssh
folder yang diatur dengan benar, dan itu berteriak kepada saya.~
, direktori Anda~/.ssh
dan~/.ssh/authorized_keys
file pada mesin jarak jauh harus hanya dapat ditulis oleh Anda:rwx------
danrwxr-xr-x
baik-baik saja, tetapirwxrwx---
tidak baik¹, bahkan jika Anda adalah satu-satunya pengguna dalam grup Anda (jika Anda lebih suka mode numerik:700
atau755
, tidak775
) .Jika
~/.ssh
atauauthorized_keys
merupakan tautan simbolik, jalur kanonik (dengan tautan simbolik diperluas) dicentang .~/.ssh/authorized_keys
File Anda (pada mesin jarak jauh) harus dapat dibaca (setidaknya 400), tetapi Anda harus membuatnya juga dapat ditulis (600) jika Anda akan menambahkan kunci lagi untuk itu.rw-------
:, mis600
.restorecon -R -v ~/.ssh
(lihat mis. Bug bug 965663 dan laporan bug Debian # 658675 ; ini ditambal dalam CentOS 6 ).¹ Kecuali pada beberapa distribusi (Debian dan turunannya) yang telah menambal kode untuk memungkinkan kemampuan menulis grup jika Anda adalah satu-satunya pengguna dalam grup Anda.
sumber
/home/USER
pasti700
atau755
ssh -v user@host
.chmod -R 700 ~/.ssh
bekerja agar saya dapat memenuhi batasan-batasan jawaban ini (RHEL 7)Jika Anda memiliki akses root ke server, cara mudah untuk menyelesaikan masalah tersebut adalah dengan menjalankan sshd dalam mode debug, dengan mengeluarkan sesuatu seperti
/usr/sbin/sshd -d -p 2222
di server (jalur lengkap ke sshd yang dapat dieksekusi diperlukan,which sshd
dapat membantu) dan kemudian menyambung dari klien denganssh -p 2222 user@host
. Ini akan memaksa daemon SSH untuk tetap berada di latar depan dan menampilkan informasi debug tentang setiap koneksi. Cari sesuatu sepertiJika tidak memungkinkan untuk menggunakan port alternatif, Anda dapat menghentikan sementara daemon SSH dan menggantinya dengan yang ada dalam mode debug. Menghentikan daemon SSH tidak mematikan koneksi yang sudah ada sehingga dimungkinkan untuk melakukan ini melalui terminal jarak jauh, tetapi agak berisiko - jika koneksi tersebut entah bagaimana rusak pada saat ketika penggantian debug tidak berjalan, Anda dikunci dari mesin sampai Anda dapat memulai kembali. Perintah yang diperlukan:
(Tergantung pada distribusi Linux Anda, baris pertama / terakhir mungkin
systemctl stop sshd.service
/systemctl start sshd.service
sebagai gantinya.)sumber
sshd -d
, tetapi gagal begitu saya benar-benar berlariservice sshd start
. Saya yakin itu sederhana, tapi saya bukan guru Linux. Adakah pikiran?Apakah dir rumah Anda terenkripsi? Jika demikian, untuk sesi ssh pertama Anda, Anda harus memberikan kata sandi. Sesi ssh kedua ke server yang sama berfungsi dengan kunci auth. Jika demikian, Anda dapat memindahkan Anda
authorized_keys
ke direktori yang tidak dienkripsi dan mengubah jalur masuk~/.ssh/config
.Yang akhirnya saya lakukan adalah membuat
/etc/ssh/username
folder, yang dimiliki oleh nama pengguna, dengan izin yang benar, dan meletakkanauthorized_keys
file di sana. Kemudian ubah arahan AuthorizedKeysFile/etc/ssh/config
menjadi:Ini memungkinkan banyak pengguna untuk memiliki akses ssh ini tanpa mengorbankan izin.
sumber
Setelah menyalin kunci ke mesin jarak jauh dan memasukkannya ke dalam,
authorized_keys
Anda harus melakukan sesuatu seperti ini:sumber
ssh-add -L
Coba saja perintah berikut ini
ssh-keygen
Tekan tombol Enter sampai Anda mendapatkan prompt
ssh-copy-id -i root@ip_address
(Ini akan meminta kata sandi sistem host)
ssh root@ip_address
Sekarang Anda harus bisa masuk tanpa kata sandi
sumber
Saya menghadapi tantangan ketika direktori home pada remote tidak memiliki hak yang benar. Dalam kasus saya, pengguna mengubah dir home ke 777 untuk beberapa akses lokal di dalam tim. Mesin tidak dapat terhubung dengan kunci ssh lagi. Saya mengubah izin menjadi 744 dan mulai berfungsi lagi.
sumber
SELinux pada RedHat / CentOS 6 memiliki masalah dengan otentikasi pubkey , mungkin ketika beberapa file dibuat selinux tidak menetapkan ACL dengan benar.
Untuk secara manual memperbaiki AClin SElinux untuk pengguna root:
sumber
ssh root@mymachine
masuk ke CentOS6mymachine
tanpa masalah, tetapi saya memiliki pengguna dengan privilege lebih rendah yang saya lebih suka gunakan, tetapissh regularUser@mymachine
masih meminta saya untuk kata sandi. pikiran?Kami mengalami masalah yang sama dan kami mengikuti langkah-langkah dalam jawaban. Tapi itu tetap tidak berhasil untuk kita. Masalah kami adalah bahwa login berfungsi dari satu klien tetapi tidak dari yang lain (direktori .ssh adalah NFS di-mount dan kedua klien menggunakan kunci yang sama).
Jadi kami harus melangkah lebih jauh. Dengan menjalankan perintah ssh dalam mode verbose Anda mendapatkan banyak informasi.
Apa yang kami temukan adalah bahwa kunci default (id_rsa) tidak diterima dan sebagai gantinya klien ssh menawarkan kunci yang cocok dengan nama host klien:
Jelas ini tidak akan berfungsi dari klien lain.
Jadi solusi dalam kasus kami adalah mengganti kunci rsa default ke kunci yang berisi user @ myclient. Ketika kunci default, tidak ada pemeriksaan untuk nama klien.
Lalu kami mengalami masalah lain, setelah beralih. Rupanya kunci di-cache di agen ssh lokal dan kami mendapat kesalahan berikut pada log debug:
Ini dipecahkan dengan memuat ulang kunci ke ssh agent:
sumber
Itu akan menjadi SSH miss konfigurasi di ujung server. File sshd_config sisi server harus diedit. Terletak di
/etc/ssh/sshd_config
. Dalam file itu, ubah variabel'ya' menjadi 'tidak' untuk ChallengeResponseAuthentication, PasswordAuthentication, UsePAM
'tidak' menjadi 'ya' untuk PubkeyAuthentication
Berdasarkan http://kaotickreation.com/2008/05/21/disable-ssh-password-authentication-for-added-security/
sumber
vi /etc/ssh/sshd_config
, tambahkan xxx pengguna ke daftar AllowUsers,service sshd restart
*** BEWARE memulai kembali layanan sshd dengan sshd_config yang buruk mungkin akan mengunci Anda di luar kotak !? Sial. Itu berhasil.Pastikan bahwa
AuthorizedKeysFile
menunjuk ke lokasi yang tepat, gunakan%u
sebagai pengganti untuk nama pengguna:Mungkin Anda hanya perlu menghapus tanda komentar pada baris:
AuthorizedKeysFile .ssh / otor_keys
Harap diingat bahwa Anda harus memuat ulang layanan ssh agar perubahan dapat terjadi:
sumber
Dua komentar: ini akan menimpa file asli. Saya baru saja menyalin kunci publik yang dihasilkan dan melakukan sesuatu seperti:
Ini akan menambahkan kunci yang ingin Anda gunakan ke daftar kunci yang sudah ada sebelumnya. Juga, beberapa sistem menggunakan file
authorized_keys2
, jadi itu ide yang baik untuk membuat tautan keras yang menunjuk di antaraauthorized_keys
danauthorized_keys2
, untuk berjaga-jaga.sumber
Solusi saya adalah akun itu dikunci. Pesan ditemukan di / var / log / secure: Pengguna tidak diizinkan karena akun terkunci Solusi: berikan kata sandi baru kepada pengguna.
sumber
/etc/shadow
untuk pengguna ini dari!
menjadi*
. Setelah itu otentikasi kata sandi masih mustahil, tetapi pengguna tidak dikunci lagi.Saya mengalami masalah yang sama dan mengikuti langkah-langkah menggunakan mode debug.
Ini menunjukkan hasil sebagai berikut
Benar-benar membingungkan
Itu menunjukkan direktori root memiliki izin untuk setiap orang. Kami mengubahnya sehingga orang lain tidak memiliki izin.
Otentikasi kunci mulai berfungsi.
sumber
rsync -av ./root/ root@THE_HOST:/root
untuk mengunggah beberapa file dari direktori kerja lokal saya, kemudian, masalah ini terjadi (pada kenyataannya, pada awalnya saya tidak menyadarinya. Setelah pekerjaan cron di host lain gagal di pagi berikutnya, saya mulai menggali alasannya) . Thersync -av ./root/ root@THE_HOST:/root
perintah mengubah pemilik izin dari/root
direktori remote host. Memperbaiki izin, masalah terpecahkan.Failed publickey for root from 135.250.24.32 port 54553 ssh2
Saya mendapatkan pesan dan masalah yang sama ketika saya lupa menambahkan pubkey ke hostauthorized_keys
. Menambahkan komentar ini seperti dalam kasus saya, saya biasanya menyadari kesalahan saya setelah saya memeriksa debug dan semua izin ditambah file konfigurasi #: o <Di / etc / selinux / config file yang mengubah SELINUX menjadi dinonaktifkan dari menegakkan ssh tanpa kata sandi berhasil.
Sebelumnya saya bisa melakukannya dengan satu cara. Sekarang dari kedua cara saya dapat melakukan ssh tanpa kata sandi.
sumber
Satu hal yang saya salah adalah kepemilikan pada direktori home saya di sistem server. Sistem server diatur ke default: default jadi saya:
Dan itu berhasil. Solusi murah lainnya adalah Menonaktifkan StrictModes: StirctModes no. di sshd_config. Setidaknya ini akan memberi tahu Anda jika pertukaran kunci dan protokol koneksi baik. Maka Anda bisa pergi berburu izin buruk.
sumber
Bagi saya, solusinya berlawanan dengan solusi Wojtek Rzepala : Saya tidak sadar saya masih menggunakan
authorized_keys2
, yang sudah usang . Pengaturan ssh saya berhenti berfungsi di beberapa titik, mungkin ketika server diperbarui. Mengganti nama.ssh/authorized_keys2
sebagai.ssh/authorized_keys
memperbaiki masalah.Doh!
sumber
Di masa lalu saya menemukan beberapa tutorial yang menjelaskan cara mencapai pengaturan tanpa kata sandi ssh, tetapi ada juga yang salah.
Mari kita mulai lagi, dan periksa setiap langkah:
ssh-keygen -t rsa
publik dan pribadi (
id_rsa.pub
danid_rsa
) akan disimpan secara otomatis di~/.ssh/
direktori.Pengaturan akan lebih mudah jika Anda menggunakan kata sandi kosong. Jika Anda tidak mau melakukan itu, maka tetap ikuti panduan ini, tetapi juga periksa poin-poin di bawah ini.
ssh-copy-id user@server
Kunci publik klien akan disalin ke lokasi server
~/.ssh/authorized_keys
.ssh user@server
Sekarang, jika masih tidak berfungsi setelah 3 langkah yang dijelaskan, mari coba yang berikut ini:
~/ssh
izin folder di mesin klien dan server ./etc/ssh/sshd_config
di server untuk memastikan bahwaRSAAuthentication
,PubkeyAuthentication
danUsePAM
opsi tidak dinonaktifkan, mereka dapat diaktifkan secara default denganyes
.ssh-agent
&ssh-add
untuk mencapai koneksi tanpa kata sandi di sesi Anda./var/log/auth.log
di server untuk menemukan masalah mengapa otentikasi kunci dilewati sama sekali.sumber
Saya mengalami masalah yang sama persis dengan Putty menghubungkan ke mesin 16,04 Ubuntu. Itu membingungkan karena program pscp PuTTY bekerja dengan baik dengan kunci yang sama (dan kunci yang sama bekerja di Putty untuk terhubung ke host lain).
Berkat komentar berharga dari @UtahJarhead, saya memeriksa file /var/log/auth.log saya dan menemukan yang berikut:
Ternyata versi OpenSSH yang lebih baru tidak menerima kunci DSA secara default. Setelah saya beralih dari DSA ke kunci RSA, itu bekerja dengan baik.
Pendekatan lain: pertanyaan ini membahas cara mengkonfigurasi server SSH untuk menerima kunci DSA: https://superuser.com/questions/1016989/ssh-dsa-keys-no-longer-work-for-password-less-authentication?lq = 1
sumber
Langkah-langkah ini akan membantu Anda. Saya menggunakan ini secara teratur di antara banyak 64bit Ubuntu 10.04 mesin.
Anda bisa memasukkan ini ke dalam skrip dengan beberapa prompt dan memanggilnya sebagai
sumber
ssh-copy-id
yang melakukan dua langkah terakhir secara otomatis.mkdir
Anda harus menambahkan di sanachmod 700 .ssh
juga dan btw Anda tidak perlu begitu bertele-tele dengan~/.ssh
,.ssh
cukup saja karena perintah dieksekusi di direktori home sajaSaya punya masalah serupa dengan ssh. Dalam kasus saya masalahnya adalah saya menginstal hadoop cloudera (dari rpm pada centos 6) dan itu menciptakan pengguna hdfs dengan direktori home
/var/lib/hadoop-hdfs
(bukan standar/home/hdfs
).Saya mengubah di / etc / passwd
/var/lib/hadoop-hdfs
to/home/hdfs
, pindah direktori home ke lokasi baru dan sekarang saya dapat terhubung dengan otentikasi kunci publik.sumber
Aku hanya punya masalah yang sama, dan bagi saya solusinya adalah untuk mengatur
UsePAM
keno
. Lihat, bahkan denganPasswordAuthentication
set keno
, Anda masih akan mendapatkankeyboard-interactive
, dan dalam kasus saya program ssh lokal saya tetap default untuk itu, untuk beberapa alasan.Latar belakang ekstra untuk membantu siapa pun dengan situasi yang sama: Saya terhubung dari host yang menjalankan Dropbear ke yang menjalankan OpenSSH. Dengan
PasswordAuthentication
danUsePAM
keduanya diaturno
pada mesin jarak jauh, saya akan mendapatkan pesan berikut jika saya memasukkanssh user@server
:Menyediakan file identitas
-i
, semuanya berfungsi seperti yang diharapkan.Mungkin ada sedikit informasi lebih lanjut di sini.
sumber
Setelah memeriksa izin, dan mencoba beberapa solusi lain yang tercantum di sini, saya akhirnya menghapus direktori ssh di server, mengatur kembali kunci publik saya.
Perintah server:
Perintah lokal:
sumber
Di server:
Itu tadi
directory permission issue
. Itu 777 di server, jadiI changed it back to 700
. Inifixed
masalah sayassh password less login failure
bahkan setelah menyalin$USER/.ssh/id_rsa.pub
ke server$USER/.ssh/authorized_keys
.sumber
Namun pilihan lain adalah varian dari jawaban @Jadish : untuk
strace
daemon ssh.Ini memiliki keuntungan yang signifikan, bahwa kita tidak perlu menghentikan sshd, apa yang dapat menghasilkan penguncian lengkap jika sesuatu berjalan buruk.
Pertama, kami menemukan pid dari proses sshd utama. Di sini kita dapat melihatnya dengan menjalankan a
pstree -pa|less
.Setelah tahu, bahwa pid itu 633, kita bisa
strace
, mengikuti anak-anaknya:Hasilnya adalah segala yang dilakukan sshd ini, dan proses turunannya, akan di-strace ke dalam file yang bernama
sux
di direktori lokal.Kemudian mereproduksi masalahnya.
Ini akan memiliki daftar log panggilan kernel yang besar, yang sebagian besar tidak dapat dipahami / tidak relevan bagi kita, tetapi tidak di mana-mana. Dalam kasus saya, yang penting adalah ini:
Itu berarti, bahwa sshd mencoba mencatat pesan User cica tidak diizinkan karena akun terkunci - itu hanya tidak bisa, karena logging tidak cukup verbose untuk itu. Tapi kita sudah tahu, pubkey ditolak karena akunnya dikunci.
Ini belum merupakan solusi - sekarang kita perlu google, apa artinya "akun terkunci" dalam kasus sshd. Ini kemungkinan besar adalah hal sepele
/etc/passwd
,/etc/shadow
sihir, tetapi yang penting dilakukan - masalahnya bukan yang misterius, tetapi yang mudah diperdebatkan / googlable.sumber
Dalam kasus saya, saya memiliki semua izin yang benar dan bahkan ketika menjalankan ssh dengan flag -vvv saya tidak bisa mencari tahu apa masalahnya.
Jadi saya membuat sertifikat baru di host jarak jauh
dan menyalin kunci yang dihasilkan ke mesin lokal dan menambahkan kunci publik baru ke ~ / .ssh / otor_keys pada host jarak jauh
Menggunakan kunci yang dihasilkan dari koneksi mesin host jarak jauh sekarang berfungsi. Jadi, jika solusi lain gagal, ini adalah hal lain untuk dicoba.
sumber
Skenario saya adalah bahwa saya memiliki server NAS tempat saya membuat
backupbot
pengguna, setelah pembuatan akun utama saya, yang dapat masuk untuk membuatbackupbot
pengguna tersebut pada awalnya . Setelah mengutak-atiksudo vim /etc/ssh/sshd_config
, dan membuatbackupbot
pengguna,vim
dapat membuat, setidaknya di Ubuntu 16.04, dan berdasarkan~/.vimrc
konfigurasi Anda , file swap tersisa dari pengeditan sesi vim Anda/etc/ssh/sshd_config
.Periksa untuk melihat apakah:
/etc/ssh/.sshd_config.swp
ada, dan jika itu menghapusnya dan restartsshd
daemon:Ini secara ajaib menyelesaikan masalah saya. Saya sebelumnya telah memeriksa semua izin saya dan bahkan sidik jari RSA dari kunci publik dan pribadi. Ini aneh dan mungkin bug dengan
sshd
, khususnya versi ini:sumber