SSH - Schlüsselbasierte Authentifizierung schlägt nach Kennwortabfrage fehl

SSH - Schlüsselbasierte Authentifizierung schlägt nach Kennwortabfrage fehl

Bei mir treten SSH-Fehler auf, wenn ich als bestimmter Benutzer eine Verbindung zu einem Server herstelle und dabei eine schlüsselbasierte Authentifizierung mit einem zugehörigen Kennwort für den Schlüssel verwende.

Dies ist ein IBM i-System.

Ich habe den öffentlichen Schlüssel für diesen Benutzer zur ~/.ssh/authorized_keysDatei auf dem Server hinzugefügt. Ihr Home-Verzeichnis sowie das ~/.sshVerzeichnis und die /.ssh/authorized_keysDatei haben keine Schreibberechtigungen für andere als den Eigentümer. Und der Eigentümer ist für alle richtig eingestellt. Interessanterweise wird das Passwort akzeptiert, wenn ich dieselben Schlüssel auf einen anderen Benutzer verschiebe. Wenn ich alternativ ein Schlüsselpaar verwende, das für einen anderen Benutzer für den Benutzer JAV funktioniert, erhalte ich dasselbe Verhalten. Es scheint also etwas mit dem Benutzer „JAV“ auf der Serverseite zu tun zu haben, das die Ursache dafür ist.

Merkwürdig ist, dass der Verbindungsversuch erst fehlschlägt, nachdem der Benutzer zur Eingabe eines Kennworts aufgefordert wird. Alles, was ich finden kann, deutet darauf hin, dass die Dateiberechtigungen ungenau sind, aber ich habe die Berechtigungen für relevante Dateien zwischen dem Benutzer, der funktioniert, und dem Benutzer, der nicht funktioniert, abgeglichen – und sie sind identisch.

JAV ist der Benutzer, der nicht funktioniert.

Berechtigungen für /home/JAVund .ssh:

bash-4.4$ pwd
/home/JAV
bash-4.4$ ls -la
total 300
drwx--S---   4 jav  0  24576 Oct 17 14:41 .
drwxrwsrwx 102 qsys 0  61440 Oct 17 15:21 ..
-rw-------   1 jav  0   2108 Oct 17 15:32 .bash_history
-rwx------   1 jav  0    204 Dec 18  2018 .bash_profile
-rwx------   1 jav  0     83 May  5  2017 .bashrc
drwxrwsrwx   3 jav  0   8192 May  9  2018 .eclipse
-rwx------   1 jav  0    559 Oct 17 16:45 .profile
-rw-------   1 jav  0    546 Oct 22  2018 .sh_history
drwx--S---   2 jav  0   8192 Oct 17 16:55 .ssh
bash-4.4$

Sehr sehr ausführliche Ausgabe bei einem fehlgeschlagenen Versuch:

┌─[dl @ PC-1802]─[~/.ssh]─[575]
└─[$]› ssh -vvv JAVDL
OpenSSH_7.6p1, OpenSSL 1.0.2n  7 Dec 2017
debug1: Reading configuration data /c/Users/dl/.ssh/config
debug1: /c/Users/dl/.ssh/config line 55: Applying options for JAVDL
debug1: Reading configuration data /etc/ssh/ssh_config
debug2: resolving "mydomain.local" port 22
debug2: ssh_connect_direct: needpriv 0
debug1: Connecting to mydomain.local [10.0.15.8] port 22.
debug1: Connection established.
debug1: key_load_public: No such file or directory
debug1: identity file /c/Users/dl/.ssh/dl_rsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /c/Users/dl/.ssh/dl_rsa-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_7.6
debug1: Remote protocol version 2.0, remote software version OpenSSH_8.0
debug1: match: OpenSSH_8.0 pat OpenSSH* compat 0x04000000
debug2: fd 3 setting O_NONBLOCK
debug1: Authenticating to mydomain.local:22 as 'jav'
debug3: hostkeys_foreach: reading file "/c/Users/dl/.ssh/known_hosts"
debug3: record_hostkey: found key type ECDSA in file /c/Users/dl/.ssh/known_hosts:1
debug3: record_hostkey: found key type RSA in file /c/Users/dl/.ssh/known_hosts:4
debug3: load_hostkeys: loaded 2 keys from mydomain.local
debug3: order_hostkeyalgs: prefer hostkeyalgs: [email protected],[email protected],[email protected],[email protected],ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,rsa-sha2-512,rsa-sha2-256,ssh-rsa
debug3: send packet: type 20
debug1: SSH2_MSG_KEXINIT sent
debug3: receive packet: type 20
debug1: SSH2_MSG_KEXINIT received
debug2: local client KEXINIT proposal
debug2: KEX algorithms: curve25519-sha256,[email protected],ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c
debug2: host key algorithms: [email protected],[email protected],[email protected],[email protected],ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,rsa-sha2-512,rsa-sha2-256,ssh-rsa,[email protected],ssh-ed25519
debug2: ciphers ctos: aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes256-cbc,aes192-cbc
debug2: ciphers stoc: aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes256-cbc,aes192-cbc
debug2: MACs ctos: [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: MACs stoc: [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: compression ctos: none,[email protected],zlib
debug2: compression stoc: none,[email protected],zlib
debug2: languages ctos:
debug2: languages stoc:
debug2: first_kex_follows 0
debug2: reserved 0
debug2: peer server KEXINIT proposal
debug2: KEX algorithms: curve25519-sha256,[email protected],ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1
debug2: host key algorithms: rsa-sha2-512,rsa-sha2-256,ssh-rsa,ecdsa-sha2-nistp256,ssh-ed25519
debug2: ciphers ctos: [email protected],aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected]
debug2: ciphers stoc: [email protected],aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected]
debug2: MACs ctos: [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: MACs stoc: [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: compression ctos: none,[email protected]
debug2: compression stoc: none,[email protected]
debug2: languages ctos:
debug2: languages stoc:
debug2: first_kex_follows 0
debug2: reserved 0
debug1: kex: algorithm: curve25519-sha256
debug1: kex: host key algorithm: ecdsa-sha2-nistp256
debug1: kex: server->client cipher: aes128-ctr MAC: [email protected] compression: none
debug1: kex: client->server cipher: aes128-ctr MAC: [email protected] compression: none
debug3: send packet: type 30
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug3: receive packet: type 31
debug1: Server host key: ecdsa-sha2-nistp256 SHA256:7Z25Q7mljYwlFOHC0SPGiCraFwbW/Pm4ecbfLL/w29E
debug3: hostkeys_foreach: reading file "/c/Users/dl/.ssh/known_hosts"
debug3: record_hostkey: found key type ECDSA in file /c/Users/dl/.ssh/known_hosts:1
debug3: record_hostkey: found key type RSA in file /c/Users/dl/.ssh/known_hosts:4
debug3: load_hostkeys: loaded 2 keys from mydomain.local
debug3: hostkeys_foreach: reading file "/c/Users/dl/.ssh/known_hosts"
debug3: record_hostkey: found key type ECDSA in file /c/Users/dl/.ssh/known_hosts:1
debug3: load_hostkeys: loaded 1 keys from 10.0.15.8
debug1: Host 'mydomain.local' is known and matches the ECDSA host key.
debug1: Found key in /c/Users/dl/.ssh/known_hosts:1
debug3: send packet: type 21
debug2: set_newkeys: mode 1
debug1: rekey after 4294967296 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug3: receive packet: type 21
debug1: SSH2_MSG_NEWKEYS received
debug2: set_newkeys: mode 0
debug1: rekey after 4294967296 blocks
debug2: key: /c/Users/dl/.ssh/dl_rsa (0x0), explicit
debug3: send packet: type 5
debug3: receive packet: type 7
debug1: SSH2_MSG_EXT_INFO received
debug1: kex_input_ext_info: server-sig-algs=<ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521>
debug3: receive packet: type 6
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug3: send packet: type 50
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey,keyboard-interactive
debug3: start over, passed a different list publickey,keyboard-interactive
debug3: preferred publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /c/Users/dl/.ssh/dl_rsa


Enter passphrase for key '/c/Users/dl/.ssh/dl_rsa':


debug3: sign_and_send_pubkey: RSA SHA256:YVE0kS2H4/n5umGS4Gv0J+aWFljM4pauXG8KEe1+2YI
debug3: send packet: type 50
debug2: we sent a publickey packet, wait for reply
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey,keyboard-interactive
debug2: we did not send a packet, disable method
debug3: authmethod_lookup keyboard-interactive
debug3: remaining preferred: password
debug3: authmethod_is_enabled keyboard-interactive
debug1: Next authentication method: keyboard-interactive
debug2: userauth_kbdint
debug3: send packet: type 50
debug2: we sent a keyboard-interactive packet, wait for reply
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey,keyboard-interactive
debug3: userauth_kbdint: disable: no info_req_seen
debug2: we did not send a packet, disable method
debug1: No more authentication methods to try.
[email protected]: Permission denied (publickey,keyboard-interactive).

┌─[dl @ PC-1802]─[~/.ssh]─[576]
└─[$]›

Erlaubnis für ~/.ssh/authorized_keys:

bash-4.4$ pwd
/home/JAV/.ssh
bash-4.4$ ls -la
total 40
drwx--S--- 2 jav 0  8192 Oct 17 17:22 .
drwx--S--- 4 jav 0 24576 Oct 17 14:41 ..
-rwx------ 1 jav 0  1303 Oct 17 16:55 authorized_keys
bash-4.4$

Von mir verwendete SSH-Host-Alias-Definition:

Host JAVDL
  HostName mydomain.local
  Port 22
  User jav
  IdentityFile ~/.ssh/dl_rsa

Ich möchte auch darauf hinweisen, dass sshd_configwir in unserer Datei explizite Ablehnungs-/Zulassungsanweisungen haben.

Teil vonsshd_config

DenyUsers root
AllowUsers dl jav

Ich kann keinen Hinweis darauf finden, was das debug3: receive packet: type 51bedeutet. Vielleicht fehlen mir meine Google-Fähigkeiten, aber ich kann nicht einmal einen Hinweis darauf finden, was die verschiedenen Pakettypen für OpenSSH sind, nicht einmal in derRFC.

Antwort1

Ich kann keinen Hinweis darauf finden, was debug3: receive packet: type 51 bedeutet. Vielleicht fehlen mir die Google-Fähigkeiten, aber ich kann nicht einmal im RFC einen Hinweis darauf finden, was die verschiedenen Pakettypen für OpenSSH sind.

Paket 51 bedeutet SSH_MSG_USERAUTH_FAILURE, wie im RFC 4252 beschrieben:

https://www.rfc-editor.org/rfc/rfc4252#section-6

Dies bedeutet, dass der Schlüssel aus irgendeinem Grund abgelehnt wurde, was in den Serverprotokollen aufgezeichnet wird (oder aufgezeichnet wird, wenn Sie den Protokollwert auf dem Server erhöhen).

Antwort2

Erstens ist die SSHD-Protokollierung unter IBM i nicht standardmäßig aktiviert. Um sie einzurichten, folgen Sie diesem Artikel:https://www.ibm.com/support/pages/sshd-can-use-unix-syslog-facilities-logging

Nachdem ich dann den LogLevel auf dem Server erhöht hatte, DEBUG3fand ich den Eintrag:

sshd[262719]: User jav not allowed because shell /QOpenSys/QIBM/ProdData/OPS/tools/bin/bash does not exist

Diese Datei existiert auf unserem System nicht, sollte aber auch nicht existieren, da wir sie bashaus dem YUM-Repository von IBM installiert haben. Dies ist der Speicherort, bashwenn Sie 5733OPS verwenden, um Bash zu erhalten, das mittlerweile als veraltet gilt.

Nach einigem Suchen habe ich festgestellt, dass es eine UDF gibt, die die Standard- PASEShell für einen bestimmten Benutzer festlegt, QSYS2.SET_PASE_SHELL_INFO()wie hier erklärt:http://archive.ibmsystemsmag.com/blogs/open-your-i/august-2017/tech-tip-be-like-a-turtle/. Nachdem ich den Wert für den Benutzer „jav“ abgefragt und mit einem Benutzer verglichen hatte, für den dies funktioniert, stellte ich fest, dass für den Benutzer „jav“ der Wert auf eingestellt war, /QOpenSys/QIBM/ProdData/OPS/tools/bin/bashwährend der Wert für alle anderen Benutzer war NULL. Und tatsächlich, nachdem ich den Wert auf eingestellt hatte NULL, funktionierte alles wie erwartet.

Ich nehme an, dass Sie die Standard-Shell mit dieser Methode festlegen können, anstatt Startdateien wie zu verwenden .profile. Wir verwenden jedoch nur Startdateien.

Abfrage zum Überprüfen des Wertes für alle Benutzer:

SELECT AUTHORIZATION_NAME, PASE_SHELL_PATH
FROM QSYS2.USER_INFO;

verwandte Informationen