Mengapa saya masih mendapatkan prompt kata sandi dengan ssh dengan otentikasi kunci publik?


470

Saya bekerja dari URL yang saya temukan di sini:

http://web.archive.org/web/20160404025901/http://jaybyjayfresh.com/2009/02/04/logging-in-without-a-password-certificates-ssh/

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.


5
output dari perintah yang Anda berikan ke ssh dengan flag -v? harus serupa dengan pastebin.com/xxe57kxg
Rob

14
juga pastikan folder .ssh Andachmod 700
Rob

8
dengan asumsi Anda punya akses root ke server, /var/log/auth.logakan memberi tahu Anda mengapa login gagal.
UtahJarhead

5
@UtahJarhead: Di server CentOS, kemungkinan berada di /var/log/secure.
Dennis Williamson

3
Menarik, chmod 0700adalah jawabannya, tetapi ketika saya melakukannya ssh -vdi 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?
void.pointer

Jawaban:


557

Pastikan izin pada ~/.sshdirektori dan isinya tepat. Ketika saya pertama kali mengatur kunci ssh auth, saya tidak memiliki ~/.sshfolder yang diatur dengan benar, dan itu berteriak kepada saya.

  • Direktori rumah Anda ~, direktori Anda ~/.sshdan ~/.ssh/authorized_keysfile pada mesin jarak jauh harus hanya dapat ditulis oleh Anda: rwx------dan rwxr-xr-xbaik-baik saja, tetapi rwxrwx---tidak baik¹, bahkan jika Anda adalah satu-satunya pengguna dalam grup Anda (jika Anda lebih suka mode numerik: 700atau 755, tidak 775) .
    Jika ~/.sshatau authorized_keysmerupakan tautan simbolik, jalur kanonik (dengan tautan simbolik diperluas) dicentang .
  • ~/.ssh/authorized_keysFile 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.
  • File kunci pribadi Anda (pada mesin lokal) harus dapat dibaca dan hanya dapat ditulis oleh Anda rw-------:, mis 600.
  • Juga, jika SELinux diatur ke penegakan, Anda mungkin perlu menjalankan 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.


29
Terima kasih banyak telah menunjukkan restorecon. Saya telah menggaruk-garuk kepala pada masalah ini untuk sementara waktu sekarang.
Richard Barrell

19
Anehnya, saya mengalami masalah dengan akun yang teman set up di VPS-nya membuat pubkey auth berfungsi. Saya pikir semua izin itu benar, tetapi penting untuk diingat bahwa itu /home/USERpasti 700atau755
Rob

2
Juga ingat untuk memeriksa pengaturan pemilik dan grup, saya menggunakan RSYNC untuk menyalin file yang diotorisasi dan tidak melihat bahwa pemilik / grup diatur ke 1000 bukannya root!
nak

11
juga, tambahkan -v ke perintah ssh Anda untuk melihat apa yang terjadi dengan kunci itu. ssh -v user@host.
tedder42

14
chmod -R 700 ~/.sshbekerja agar saya dapat memenuhi batasan-batasan jawaban ini (RHEL 7)
scottyseus

147

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 2222di server (jalur lengkap ke sshd yang dapat dieksekusi diperlukan, which sshddapat membantu) dan kemudian menyambung dari klien dengan ssh -p 2222 user@host. Ini akan memaksa daemon SSH untuk tetap berada di latar depan dan menampilkan informasi debug tentang setiap koneksi. Cari sesuatu seperti

debug1: trying public key file /path/to/home/.ssh/authorized_keys
...
Authentication refused: bad ownership or modes for directory /path/to/home/

Jika 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:

service ssh stop
/usr/sbin/sshd -d
#...debug output...
service ssh start

(Tergantung pada distribusi Linux Anda, baris pertama / terakhir mungkin systemctl stop sshd.service/ systemctl start sshd.servicesebagai gantinya.)


5
Saya baru saja mencoba ini ... dan berfungsi dengan baik ketika saya berlari sshd -d, tetapi gagal begitu saya benar-benar berlari service sshd start. Saya yakin itu sederhana, tapi saya bukan guru Linux. Adakah pikiran?
N Rohler

3
Untuk referensi, posting ini menjelaskan solusi SELinux yang mengatasi masalah saya.
N Rohler

2
Saya juga mengalami masalah dengan mendapatkan otentikasi kunci publik untuk bekerja dan saya cukup yakin bahwa izin direktori bukan masalah. Setelah menjalankan SSH dalam mode debug, saya segera menemukan bahwa saya salah dan izin adalah masalahnya.
ub3rst4r

3
Saran bagus, folder pengguna saya dengan izin yang salah.
gdfbarbosa

2
Terima kasih. Dari semua alasan, pengguna saya tidak diizinkan masuk karena shell yang ditentukan oleh ansible (/ bin / zsh) pada pembuatan pengguna tidak ada. Saya tidak akan pernah menduga itu.
chishaku

53

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_keyske direktori yang tidak dienkripsi dan mengubah jalur masuk ~/.ssh/config.

Yang akhirnya saya lakukan adalah membuat /etc/ssh/usernamefolder, yang dimiliki oleh nama pengguna, dengan izin yang benar, dan meletakkan authorized_keysfile di sana. Kemudian ubah arahan AuthorizedKeysFile /etc/ssh/configmenjadi:

AuthorizedKeysFile    /etc/ssh/%u/authorized_keys

Ini memungkinkan banyak pengguna untuk memiliki akses ssh ini tanpa mengorbankan izin.



3
Jawaban ini sangat menonjol & membantu saya - bagi siapa saja yang bertanya-tanya apakah ini masalahnya - Anda dapat melihat "pam_ecryptfs: File passphrase yang dibungkus" di auth.log Anda; entah bagaimana itu tidak cukup untuk membuatku mengingat homedir itu dienkripsi. Anda juga mungkin menemukan login pertama meminta kata sandi, sesi berikutnya tidak (karena itu didekripsi sementara sesi lain terbuka).
Pasif

Omong kosong aku sudah mencari wayyyy untuk merindukan menyelesaikan masalah itu, terima kasih banyak!
h3.

33

Setelah menyalin kunci ke mesin jarak jauh dan memasukkannya ke dalam, authorized_keysAnda harus melakukan sesuatu seperti ini:

ssh-agent bash
ssh-add ~/.ssh/id_dsa or id_rsa

1
Sebenarnya tidak, kamu tidak. ssh secara otomatis menggunakan ~ / .ssh / id_rsa (atau id_dsa) tanpa harus menggunakan agen kunci.
Patrick

7
Ini masih bisa menjadi saran yang bermanfaat jika seseorang harus menentukan kunci yang berbeda namanya di ~ / .ssh / config (mis. Pada host * .mydomain.org ... IdentityFile ~ / .ssh / some_limited_use.pub - ssh-add ~ / .ssh / some_limited_use.pub).
89c3b1b8-b1ae-11e6-b842-48d705

Ini telah menyelesaikan masalah saya dengan mendapatkan prompt kata sandi setelah menambahkan kunci. Seperti yang ditunjukkan oleh 89c3b1b8-b1ae-11e6-b842-48d705, alasan untuk menjalankan perintah ini secara manual adalah nama file kunci yang tidak standar.
Михаил Лисаков

Seperti yang ditunjukkan di atas dalam komentar, jika Anda menggunakan kunci apa pun selain kunci default, itu tidak ditambahkan secara default ke agen ssh. Jadi pastikan untuk memeriksa kunci yang ingin Anda gunakan ada di gantungan kunci agen:ssh-add -L
James

30

Coba saja perintah berikut ini

  1. ssh-keygen

    Tekan tombol Enter sampai Anda mendapatkan prompt

  2. ssh-copy-id -i root@ip_address

    (Ini akan meminta kata sandi sistem host)

  3. ssh root@ip_address

    Sekarang Anda harus bisa masuk tanpa kata sandi


1
Di server mana?
Amalgovinus

@Amalgovinus Jelas Anda menjalankan ini pada klien, bukan mesin yang Anda hubungkan - Anda tidak ingin salinan kunci pribadi Anda di server! :)
nevelis

4
Harap dicatat bahwa secara umum, mengizinkan login root jarak jauh bukan praktik keamanan yang disarankan.
arielf

27

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.


7
Kami punya masalah ini juga - 755 pada
dir

Saya memiliki izin yang ditetapkan ke 777 dan diabaikan, terima kasih !!!
ka_lin

Sama disini. Terima kasih. Sedang menggaruk kepalaku untuk sementara waktu, itu terjadi.
Marcin

Ya lihat jawabannya di sini untuk detail lebih lanjut unix.stackexchange.com/questions/205842/…
Tim

Ini mungkin jawaban bagi orang-orang yang telah melakukan pembuatan kunci dengan benar namun masih dimintai kata sandi.
Fergie

14

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:

restorecon -R -v /root/.ssh

menggunakan openssh client pada windows saya dapat ssh root@mymachinemasuk ke CentOS6 mymachinetanpa masalah, tetapi saya memiliki pengguna dengan privilege lebih rendah yang saya lebih suka gunakan, tetapi ssh regularUser@mymachinemasih meminta saya untuk kata sandi. pikiran?
Groostav

13

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.

ssh -vv user@host

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:

debug1: Offering public key: /home/user/.ssh/id_rsa                                    
debug2: we sent a publickey packet, wait for reply                                        
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Offering public key: /home/user/.ssh/id_dsa                                    
debug2: we sent a publickey packet, wait for reply                                        
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Offering public key: user@myclient                                          
debug2: we sent a publickey packet, wait for reply                                        
debug1: Server accepts key: pkalg ssh-rsa blen 277                  

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:

'Agent admitted failure to sign using the key'

Ini dipecahkan dengan memuat ulang kunci ke ssh agent:

ssh-add

9

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/


1
Seperti dalam komentar untuk pertanyaan, periksa / var / log / secure atau /var/log/auth.log. Dalam kasus saya, saya melihat "Pengguna xxx dari xxx tidak diizinkan karena tidak tercantum dalam AllowUsers" "input_userauth_request: xxx pengguna tidak valid [preauth]" (dan "rexec baris 35: opsi yang tidak digunakan ServerKeyBits" di / var / log / messages walaupun saya tidak tahu apa itu adalah). Untuk menyelesaikannya 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.
gaoithe

6

Pastikan bahwa AuthorizedKeysFilemenunjuk ke lokasi yang tepat, gunakan %usebagai pengganti untuk nama pengguna:

# /etc/ssh/sshd_config
AuthorizedKeysFile /home/%u/authorized_keys

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:

service sshd reload

4

Dua komentar: ini akan menimpa file asli. Saya baru saja menyalin kunci publik yang dihasilkan dan melakukan sesuatu seperti:

cat your_public_key.pub >> .ssh/authorized_keys

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 antara authorized_keysdan authorized_keys2, untuk berjaga-jaga.


Ya, saya perhatikan itu juga tentang penulisan ulang, tapi saya tidak punya, jadi tidak masalah. Saya membuat symlink ke author_keys2 tapi itu tidak membantu.
Thom

Juga, periksa izin file / direktori. Mereka dijelaskan di situs web yang Anda berikan.
Wojtek Rzepala

3
dir ~/ .ssh Anda harus 700 file kunci pribadi Anda harus 600 file kunci publik Anda harus 644 file auth Anda (pada remote) harus 644
Rob

@Rob itu masalahnya. Jika Anda memposting itu sebagai jawaban, saya akan menerimanya.
Thom

4

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.


Saya memperbaikinya dengan mengubah bidang kata sandi /etc/shadowuntuk pengguna ini dari !menjadi *. Setelah itu otentikasi kata sandi masih mustahil, tetapi pengguna tidak dikunci lagi.
user3132194

4

Saya mengalami masalah yang sama dan mengikuti langkah-langkah menggunakan mode debug.

/usr/sbin/sshd -d

Ini menunjukkan hasil sebagai berikut

debug1: trying public key file /root/.ssh/authorized_keys
debug1: fd 4 clearing O_NONBLOCK
Authentication refused: bad ownership or modes for directory /root
debug1: restore_uid: 0/0
debug1: temporarily_use_uid: 0/0 (e=0/0)
debug1: trying public key file /root/.ssh/authorized_keys2
debug1: Could not open authorized keys '/root/.ssh/authorized_keys2': No such file or directory
debug1: restore_uid: 0/0
Failed publickey for root from 135.250.24.32 port 54553 ssh2
debug1: userauth-request for user root service ssh-connection method gssapi-with-mic

Benar-benar membingungkan

[root@sys-135 ~]# ls -l /
drwxrwxrwx.   2 root root     4096 Dec 14 20:05 bin
drwxrwxrwx.   5 root root     1024 May  6  2014 boot
drwxrwxrwx.   2 root root     4096 Dec  2  2013 cgroup
drwxrwxrwx.  10 root root     1024 Sep 25 23:46 data
drwxrwxrwx. 124 root root    12288 Dec 16 10:26 etc
drwxrwxrwx.  11 root root     4096 Jan 14  2014 lib
drwxrwxrwx.   9 root root    12288 Dec 14 20:05 lib64
drwxrwxrwx.   2 root root    16384 Jan 10  2014 lost+found
drwxrwxrwx.   2 root root     4096 Jun 28  2011 media
drwxr-xr-x.   2 root root        0 Dec 10 14:35 misc
drwxrwxrwx.   2 root root     4096 Jun 28  2011 mnt
drwxrwxrwx.   4 root root     4096 Nov 24 23:13 opt
dr-xr-xr-x. 580 root root        0 Dec 10 14:35 proc
drwxrwxrwx.  45 root root     4096 Dec 16 10:26 root

Itu menunjukkan direktori root memiliki izin untuk setiap orang. Kami mengubahnya sehingga orang lain tidak memiliki izin.

[root@sys-135 ~]# chmod 750 /root

Otentikasi kunci mulai berfungsi.


Saya memiliki masalah yang sama. Kemarin, saya mengeluarkan rsync -av ./root/ root@THE_HOST:/rootuntuk 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) . The rsync -av ./root/ root@THE_HOST:/rootperintah mengubah pemilik izin dari /rootdirektori remote host. Memperbaiki izin, masalah terpecahkan.
LiuYan 刘 研

Failed publickey for root from 135.250.24.32 port 54553 ssh2Saya mendapatkan pesan dan masalah yang sama ketika saya lupa menambahkan pubkey ke host authorized_keys. Menambahkan komentar ini seperti dalam kasus saya, saya biasanya menyadari kesalahan saya setelah saya memeriksa debug dan semua izin ditambah file konfigurasi #: o <
tuk0z

3

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.


3

Satu hal yang saya salah adalah kepemilikan pada direktori home saya di sistem server. Sistem server diatur ke default: default jadi saya:

chown -R root:root /root

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.


Saya juga. Lihatlah pesan di / var / log / secure. Saya melihat pesan: "Otentikasi ditolak: kepemilikan buruk atau mode untuk direktori" ($ HOME). Pastikan tidak ada akses tulis ke $ HOME ke Grup atau Lainnya. Saya tidak akan pernah menemukan ini jika saya tidak memiliki akses root tanpa izin ke server ....
SoloPilot

2

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_keys2sebagai .ssh/authorized_keysmemperbaiki masalah.

Doh!


Ini juga merupakan opsi konfigurasi di / etc / ssh / sshd_config, walaupun saya pikir saya akan mengganti nama seperti yang Anda lakukan.
Rick Smith

2

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:

  1. DARI KLIEN - Hasilkan kunci: Kunci ssh-keygen -t rsa
    publik dan pribadi ( id_rsa.pubdan id_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.

  2. DARI KLIEN - Salin kunci publik ke server : ssh-copy-id user@server
    Kunci publik klien akan disalin ke lokasi server ~/.ssh/authorized_keys .

  3. DARI KLIEN - Terhubung ke server:ssh user@server

Sekarang, jika masih tidak berfungsi setelah 3 langkah yang dijelaskan, mari coba yang berikut ini:

  • Periksa ~/sshizin folder di mesin klien dan server .
  • Periksa /etc/ssh/sshd_configdi server untuk memastikan bahwa RSAAuthentication, PubkeyAuthenticationdan UsePAMopsi tidak dinonaktifkan, mereka dapat diaktifkan secara default dengan yes.
  • Jika Anda memasukkan frasa sandi saat membuat kunci klien Anda, maka Anda dapat mencoba ssh-agent& ssh-adduntuk mencapai koneksi tanpa kata sandi di sesi Anda.
  • Periksa konten /var/log/auth.logdi server untuk menemukan masalah mengapa otentikasi kunci dilewati sama sekali.

Terima kasih telah mendaftar langkah-langkahnya! Saya harus "ssh-copy-id user @ server" dan menyadari bahwa saya awalnya menyalin kunci publik yang salah.
mattewati

2

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:

sshd[17278]: userauth_pubkey: key type ssh-dss not in PubkeyAcceptedKeyTypes [preauth]

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


1

Langkah-langkah ini akan membantu Anda. Saya menggunakan ini secara teratur di antara banyak 64bit Ubuntu 10.04 mesin.

[ ! -f ~/.ssh/id_rsa.pub ] && ssh-keygen -t rsa;
ssh <username>@<remote_machine> 'mkdir -p ~/.ssh'
cat ~/.ssh/id_rsa.pub | ssh <username>@<remote_machine> 'cat >> ~/.ssh/authorized_keys'

Anda bisa memasukkan ini ke dalam skrip dengan beberapa prompt dan memanggilnya sebagai

script_name username remote_machine

Sudah ada ssh-copy-idyang melakukan dua langkah terakhir secara otomatis.
jofel

2
@ jofel perlu diingat bahwa di banyak sistem ssh-copy-id tidak ada. @Sriharsha setelah mkdirAnda harus menambahkan di sana chmod 700 .sshjuga dan btw Anda tidak perlu begitu bertele-tele dengan ~/.ssh, .sshcukup saja karena perintah dieksekusi di direktori home saja
janos

1

Saya 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-hdfsto /home/hdfs, pindah direktori home ke lokasi baru dan sekarang saya dapat terhubung dengan otentikasi kunci publik.


1

Aku hanya punya masalah yang sama, dan bagi saya solusinya adalah untuk mengatur UsePAMke no. Lihat, bahkan dengan PasswordAuthenticationset ke no, Anda masih akan mendapatkan keyboard-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 PasswordAuthenticationdan UsePAMkeduanya diatur nopada mesin jarak jauh, saya akan mendapatkan pesan berikut jika saya memasukkan ssh user@server:

ssh: Connection to user@server:22 exited: Disconnect received

Menyediakan file identitas -i, semuanya berfungsi seperti yang diharapkan.

Mungkin ada sedikit informasi lebih lanjut di sini.


1

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:

# rm -rf ~/.ssh

Perintah lokal:

# ssh-copy-id user@192.168.1.1        # where <user> is your username and <192.168.1.1> is the server IP


0

Namun pilihan lain adalah varian dari jawaban @Jadish : untuk stracedaemon 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.

  |-sshd,633 -D  <-- THIS IS WHAT WE WANT!
  |   `-sshd,21973   
  |       `-sshd,21996    
  |           `-bash,22000
  |               `-screen,638 -r

Setelah tahu, bahwa pid itu 633, kita bisa strace, mengikuti anak-anaknya:

strace -p 633 -s 4096 -f -o sux

Hasilnya adalah segala yang dilakukan sshd ini, dan proses turunannya, akan di-strace ke dalam file yang bernama suxdi 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:

6834  sendto(4, "<38>Jan 15 18:49:21 sshd[6834]: User cica not allowed because account is locked\0", 84, MSG_NOSIGNAL, NULL, 0) = 84

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/shadowsihir, tetapi yang penting dilakukan - masalahnya bukan yang misterius, tetapi yang mudah diperdebatkan / googlable.


0

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

ssh-keygen -t rsa -C "your_email@example.com"

dan menyalin kunci yang dihasilkan ke mesin lokal dan menambahkan kunci publik baru ke ~ / .ssh / otor_keys pada host jarak jauh

cat id_rsa.pub >> authorized_keys

Menggunakan kunci yang dihasilkan dari koneksi mesin host jarak jauh sekarang berfungsi. Jadi, jika solusi lain gagal, ini adalah hal lain untuk dicoba.


0

Skenario saya adalah bahwa saya memiliki server NAS tempat saya membuat backupbotpengguna, setelah pembuatan akun utama saya, yang dapat masuk untuk membuat backupbotpengguna tersebut pada awalnya . Setelah mengutak-atik sudo vim /etc/ssh/sshd_config, dan membuat backupbotpengguna, vimdapat membuat, setidaknya di Ubuntu 16.04, dan berdasarkan ~/.vimrckonfigurasi Anda , file swap tersisa dari pengeditan sesi vim Anda /etc/ssh/sshd_config.

Periksa untuk melihat apakah: /etc/ssh/.sshd_config.swpada, dan jika itu menghapusnya dan restart sshddaemon:

$ sudo rm /etc/ssh/.sshd_config.swp
$ sudo service sshd restart

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:

OpenSSH_7.4p1 Ubuntu-10, OpenSSL 1.0.2g 1 Mar 2016

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.