Nicht interaktive SSH-Verbindung schlägt fehl – ​​Fehler: /dev/tty kann nicht geöffnet werden: Kein solches Gerät oder keine solche Adresse; Überprüfung des Hostschlüssels fehlgeschlagen.

Nicht interaktive SSH-Verbindung schlägt fehl – ​​Fehler: /dev/tty kann nicht geöffnet werden: Kein solches Gerät oder keine solche Adresse; Überprüfung des Hostschlüssels fehlgeschlagen.

Unten können Sie das Protokoll sehen. Die Verbindung besteht von einem Cygwin SSH-Client zu einem Cygwin SSHD-Server. Die Verbindung funktioniert einwandfrei, wenn sie über die Befehlszeile gestartet wird, schlägt jedoch fehl, wenn sie über Jenkins (Java Continuous Integration Server) gestartet wird. Die Datei /dev/tty existiert und ist für alle schreibgeschützt. Ich habe versucht, sie zu löschen und neu zu erstellen, aber das geht nicht, da Cygwin sie neu erstellt, bevor ich einen Link zu /dev/ttySO erstellen kann.

ssh -t -vvv [email protected] 'mv -v /cygdrive/z/deploy-scripts /cygdrive/z/deploy-scripts-`date +%F_%H-%M-%S`'
OpenSSH_6.0p1, OpenSSL 1.0.1c 10 May 2012
Pseudo-terminal will not be allocated because stdin is not a terminal.
debug2: ssh_connect: needpriv 0
debug1: Connecting to server.company.com [] port 22.
debug1: Connection established.
debug1: identity file /.ssh/id_rsa type -1
debug1: identity file /.ssh/id_rsa-cert type -1
debug1: identity file /.ssh/id_dsa type -1
debug1: identity file /.ssh/id_dsa-cert type -1
debug1: identity file /.ssh/id_ecdsa type -1
debug1: identity file /.ssh/id_ecdsa-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.9
debug1: match: OpenSSH_5.9 pat OpenSSH_5*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.0
debug2: fd 3 setting O_NONBLOCK
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug2: kex_parse_kexinit: ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
debug2: kex_parse_kexinit: [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-rsa,ssh-dss
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,[email protected]
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,[email protected]
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,[email protected],hmac-sha2-256,hmac-sha2-256-96,hmac-sha2-512,hmac-sha2-512-96,hmac-ripemd160,[email protected],hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,[email protected],hmac-sha2-256,hmac-sha2-256-96,hmac-sha2-512,hmac-sha2-512-96,hmac-ripemd160,[email protected],hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: none,[email protected],zlib
debug2: kex_parse_kexinit: none,[email protected],zlib
debug2: kex_parse_kexinit: 
debug2: kex_parse_kexinit: 
debug2: kex_parse_kexinit: first_kex_follows 0 
debug2: kex_parse_kexinit: reserved 0 
debug2: kex_parse_kexinit: ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
debug2: kex_parse_kexinit: ssh-rsa,ssh-dss,ecdsa-sha2-nistp256
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,[email protected]
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,[email protected]
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,[email protected],hmac-sha2-256,hmac-sha2-256-96,hmac-sha2-512,hmac-sha2-512-96,hmac-ripemd160,[email protected],hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,[email protected],hmac-sha2-256,hmac-sha2-256-96,hmac-sha2-512,hmac-sha2-512-96,hmac-ripemd160,[email protected],hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: none,[email protected]
debug2: kex_parse_kexinit: none,[email protected]
debug2: kex_parse_kexinit: 
debug2: kex_parse_kexinit: 
debug2: kex_parse_kexinit: first_kex_follows 0 
debug2: kex_parse_kexinit: reserved 0 
debug2: mac_setup: found hmac-md5
debug1: kex: server->client aes128-ctr hmac-md5 none
debug2: mac_setup: found hmac-md5
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: sending SSH2_MSG_KEX_ECDH_INIT
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ECDSA 
debug1: read_passphrase: can't open /dev/tty: No such device or address

Antwort1

Wie soll Jenkins (Java Continuous Integration-Server) die Passphrase des SSH-Schlüssels eingeben?

Wenn es sich um eine Entwicklungs- oder Staging-Umgebung handelt und keine Sicherheitsbedenken bestehen, können Sie versuchen, die Passphrase vorübergehend aus dem Schlüssel zu entfernen und prüfen, ob dies besser funktioniert.

Bearbeitung #1:

Ich konnte Ihr Problem nur reproduzieren, indem ich die Berechtigungen für /dev/tty entfernte, wie in den OpenSSH-FAQs angegeben, aber ich nehme an, das haben Sie bereits überprüft?

Mit falschen Berechtigungen:

#ls -l /dev/tty
crw-r----- 1 root root 5, 0 Aug 23 21:47 /dev/tty
$ssh -T -vv -p 2222 <username>@127.0.0.1
[...]
debug1: read_passphrase: can't open /dev/tty: Permission denied
debug1: permanently_drop_suid: xxxx
[...]

Mit guten Berechtigungen:

#chmod 666 /dev/tty
# ls -l /dev/tty
crw-rw-rw- 1 root root 5, 0 Aug 23 21:56 /dev/tty
[ssh client works]

Antwort2

Bei mir war es so git cloneund ich fragte, ob ich dem Fingerabdruck vertrauen könne. Er befindet sich im Container, also habe ich für blindes Vertrauen Folgendes festgelegt StrictHostKeyChecking:

FROM node:16

COPY "id_rsa" /root/.ssh/id_rsa
COPY "id_rsa.pub" /root/.ssh/id_rsa.pub

ENV GIT_SSH_COMMAND "ssh -v -o 'PasswordAuthentication no' '-o StrictHostKeyChecking=accept-new'"
RUN git clone [email protected]:evil/project.git

Antwort3

...
debug1: Server host key: ECDSA 
debug1: read_passphrase: can't open /dev/tty: No such device or address

Ich bin auf dieses Problem gestoßen (10 Jahre in der Zukunft) und habe festgestellt, dass das Problem nicht das TTY oder die Passphrase an sich ist. Jenkins SSH-Schlüssel können Passphrasen über die ssh-agentFunktion verarbeiten. Aber trotzdem habe ich die Passphrase beim Testen deaktiviert. Das war nicht das Problem.

Die Referenz read_passphrasemuss die allgemeine Eingabe „Fragecode stellen“ sein. Bei mir hat es nicht funktioniert, diesen Dialog anzuzeigen:

The authenticity of host 'server.company.com (192.168.188.44)' can't be established.
RSA key fingerprint is SHA256:UNOzlP66WpDuEo34Wgs8mewypV0UzqHLsIFoqwe8dYo.
Are you sure you want to continue connecting (yes/no/[fingerprint])? no

Um den Schlüssel für alle mit einem Server verknüpften Adressen programmgesteuert zu akzeptieren, können Sie Folgendes verwenden:

ssh-keyscan -p 22 `getent ahosts server.company.com | awk '$3 { print $1 " " $3 }' | sort -u` >> ~/.ssh/known_hosts

verwandte Informationen