SSH terus melewatkan pubkey saya dan meminta kata sandi

52

Setiap kali saya ssh ke server jauh saya, saya harus memberikan kata sandi. Saya menyalin kunci publik saya (id_dsa.pub) ke server jarak jauh menggunakan:

ssh-copy-id -i id_dsa.pub user@server

Saya telah memeriksa apakah sudah ditambahkan dengan benar ke otor_keys. Semua izin file / direktori sudah benar:

~user 755
~user/.ssh 700
~user/.ssh/authorized_keys 640
~user/.ssh/id_dsa.pub 644

Kolom PasswordAuthentication di / etc / ssh / sshd_config diatur ke yes. Saya menempatkan sshd dalam mode debug dan menambahkan saklar verbose ke perintah ssh. Saya mendapat kesan bahwa server tidak mencoba menggunakan id_pub.dsa karena baris

Skipping ssh-dss key: ........... not in PubkeyAcceptedKeyTypes

Tidak ada disk terenkripsi di sisi server. Ada ide bagaimana cara maju? Ini adalah info debug ssh daemon:

sudo /usr/sbin/sshd -d
====
debug1: sshd version OpenSSH_6.6.1, OpenSSL 1.0.1f 6 Jan 2014
debug1: key_parse_private2: missing begin marker
debug1: read PEM private key done: type RSA
debug1: private host key: #0 type 1 RSA
debug1: key_parse_private2: missing begin marker
debug1: read PEM private key done: type DSA
debug1: private host key: #1 type 2 DSA
debug1: key_parse_private2: missing begin marker
debug1: read PEM private key done: type ECDSA
debug1: private host key: #2 type 3 ECDSA
debug1: rexec_argv[0]='/usr/sbin/sshd'
debug1: rexec_argv[1]='-d'
Set /proc/self/oom_score_adj from 0 to -1000
debug1: Bind to port 22 on 0.0.0.0.
Server listening on 0.0.0.0 port 22.
debug1: Bind to port 22 on ::.
Server listening on :: port 22.
debug1: Server will not fork when running in debugging mode.
debug1: rexec start in 5 out 5 newsock 5 pipe -1 sock 8
debug1: inetd sockets after dupping: 3, 3
Connection from xxx port 63521 on yyy port 22
debug1: Client protocol version 2.0; client software version OpenSSH_7.1
debug1: match: OpenSSH_7.1 pat OpenSSH* compat 0x04000000
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.3
debug1: permanently_set_uid: 115/65534 [preauth]
debug1: list_hostkey_types: ssh-rsa,ssh-dss,ecdsa-sha2-nistp256 [preauth]
debug1: SSH2_MSG_KEXINIT sent [preauth]
debug1: SSH2_MSG_KEXINIT received [preauth]
debug1: kex: client->server [email protected] <implicit> none [preauth]
debug1: kex: server->client [email protected] <implicit> none [preauth]
debug1: expecting SSH2_MSG_KEX_ECDH_INIT [preauth]
debug1: SSH2_MSG_NEWKEYS sent [preauth]
debug1: expecting SSH2_MSG_NEWKEYS [preauth]
debug1: SSH2_MSG_NEWKEYS received [preauth]
debug1: KEX done [preauth]
debug1: userauth-request for user damian service ssh-connection method none [preauth]
debug1: attempt 0 failures 0 [preauth]
debug1: PAM: initializing for "damian"
debug1: PAM: setting PAM_RHOST to "freebox-server.local"
debug1: PAM: setting PAM_TTY to "ssh"
Connection closed by xxxx [preauth]
debug1: do_cleanup [preauth]
debug1: monitor_read_log: child log fd closed
debug1: do_cleanup

Berikut ini adalah keluaran ssh verbose:

$ ssh -v user@server
OpenSSH_7.1p1, OpenSSL 1.0.2d 9 Jul 2015
debug1: Connecting to server [xxxx] port 22.
debug1: Connection established.
debug1: key_load_public: No such file or directory
debug1: identity file /home/user/.ssh/id_rsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/user/.ssh/id_rsa-cert type -1
debug1: identity file /home/user/.ssh/id_dsa type 2
debug1: key_load_public: No such file or directory
debug1: identity file /home/user/.ssh/id_dsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/user/.ssh/id_ecdsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/user/.ssh/id_ecdsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/user/.ssh/id_ed25519 type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/user/.ssh/id_ed25519-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_7.1
debug1: Remote protocol version 2.0, remote software version OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.3
debug1: match: OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.3 pat OpenSSH_6.6.1* compat 0x04000000
debug1: Authenticating to server:22 as 'user'
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client [email protected] <implicit> none
debug1: kex: client->server [email protected] <implicit> none
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ecdsa-sha2-nistp256 SHA256:v4BNHM0Q33Uh6U4VHenA9iJ0wEyi8h0rFVetbcXBKqA
debug1: Host 'server' is known and matches the ECDSA host key.
debug1: Found key in /home/user/.ssh/known_hosts:2
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Trying private key: /home/user/.ssh/id_rsa
debug1: Skipping ssh-dss key /home/user/.ssh/id_dsa for not in PubkeyAcceptedKeyTypes
debug1: Trying private key: /home/user/.ssh/id_ecdsa
debug1: Trying private key: /home/user/.ssh/id_ed25519
debug1: Next authentication method: password
user@server's password:
Damo
sumber
1
Lihat juga superuser.com/q/1016989/93541 untuk masalah yang sama (dan pada dasarnya solusi yang sama).
DW
Perhatikan bahwa jika sshd_config di tujuan tidak memiliki PubkeyAuthentication , Anda akan selalu dimintai kata sandi. Setel ke ya dan mulai ulang sshd (pada host tujuan) untuk mengaktifkan otentikasi pubkey.
C. Kelly

Jawaban:

84

Versi openssh baru (7.0+) tidak lagi menggunakan kunci DSA dan tidak menggunakan kunci DSA secara default (bukan pada server atau klien). Kunci tidak disukai untuk digunakan lagi, jadi jika Anda bisa, saya akan merekomendasikan untuk menggunakan kunci RSA jika memungkinkan.

Jika Anda benar-benar perlu menggunakan kunci DSA, Anda harus mengizinkannya secara eksplisit dalam konfigurasi klien Anda

PubkeyAcceptedKeyTypes +ssh-dss

Seharusnya cukup untuk memasukkan kalimat itu ~/.ssh/config, karena pesan verbose mencoba memberi tahu Anda.

Jakuje
sumber
5
+1, tetapi saran yang lebih baik adalah menggunakan jenis kunci lain yang tidak usang, ...
jasonwryan
@jasonwryan Terima kasih atas komentarnya. Pasti. Saya akan memperbarui jawabannya.
Jakuje
Terima kasih Jakuje! Masuk akal, saya tidak menyadari bahwa itu sudah lama. Saya membuat pasangan kunci baru ssh-keygenrsa adalah default sekarang. Saya akan mencoba masuk dengan ini dari mesin lain besok.
Damo
Jika Anda ~/.ssh/configtidak ada, buat saja. Dan ingat untuk mengatur hak akses corect: chmod 600 ~/.ssh/config.
Florian Brucker
@knb jangan lakukan itu. Ini akan menghindari penggunaan algoritma lain di masa depan, karena Anda menghapus semua algoritma kurva eliptik.
Jakuje
2

Dalam kasus saya, saya mengalami masalah ini karena pengguna lain telah mengubah AuthorizedKeysFilelokasi. Karena tidak ada authorized_keysuntuk pengguna lain di lokasi ini, login akan menjadi default untuk kata sandi, meskipun authorized_keysada dengan izin yang benar di direktori home default.

AuthorizedKeysFile   /etc/ssh/%u/authorized_keys

Mengomentari jalur modifikasi ini dan memulai kembali layanan sshd untuk kembali ke pengaturan default, yang kemudian memungkinkan pengguna lain untuk mengautentikasi menggunakan kunci mereka.

GotGame
sumber
Saya baru saja menyelesaikan masalah serupa pada sistem RHEL7 di mana konteks SELinux tidak diinisialisasi dengan benar pada homedir pengguna, jadi ssh tidak dapat membaca file kunci yang sah meskipun izin standar. Saya akhirnya menjalankan restorecon -Rv /homeuntuk memperbaikinya untuk pengguna lain yang juga salah mengatur pada sistem yang sama.
dannysauer
1

Saya mencoba Jawaban Jakuje Tidak berhasil. Tapi saya mengerti masalahnya dari sana. Mencoba menambahkan komentar tetapi perlu reputasi itu sebabnya menambahkan anwser.

Tetapi file konfigurasi untuk saya / etc / ssh / ssh_config

  1. sudo nano /etc/ssh/ssh_config
  2. PubkeyAcceptedKeyTypes +ssh-dss Menambahkan baris ini di bagian bawah.
  3. Simpan dan coba lagi.

Bekerja!

SWAPNIL DEWALKAR
sumber
1

Hanya untuk meringkas apa yang saya lakukan untuk SSH ke raspberry Pi .

Di mesin server (raspberry Pi):

$ ip addr show 

atau hanya ip a, ini akan menampilkan alamat IP dari mesin Pi - host_ip

$ mkdir .ssh

Di mesin klien (ubuntu):

$ ssh-keygen -t rsa  

Kredit ke @ Jakuje di atas. Saya awalnya menggunakan ssh-keygen -t dsa untuk generasi kunci, dan ssh terus meminta saya untuk kata sandi. ssh -v ip-address tidak memberi saya banyak info berguna, sampai saya melihat jawaban @ Jakuje

$ cat .ssh/id_rsa.pub | ssh user_id@host_ip 'cat >> ~/.ssh/authorized_keys'  

ganti user_id dan host_ip, saat diminta, berikan kata sandi untuk mesin Pi

$ ssh user@ip_address

berhasil masuk ke PI, tidak ada lagi kata sandi

VictorL
sumber
0

AS tidak bekerja untuk saya. ya .

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat /Users/user_name/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

Dan saya dapat ssh tanpa kata sandi.

rodya
sumber