ssh échoue: image non trouvée [preauth]


3

Lorsque j'essaie d'utiliser SSH sur mon ordinateur, ssh échoue avec l'erreur suivante:

Mothership:~ kuyan$ ssh kuyan@localhost
Connection closed by ::1

Cela se produit également lorsque je tente d'utiliser SSH pour mon utilisateur à partir d'un autre ordinateur. Ce message apparaît dans la console lorsque je tente de me connecter:

12/12/12 3:44:30.468 PM sshd[2576]: fatal: ssh_sandbox_child: sandbox_init: dlopen(/usr/lib/libsandbox.1.dylib, 261): image not found [preauth]

Les informations pertinentes:

  • J'utilise une version de sshd différente de celle fournie par OS X, installée via brew install openssh- mais cette erreur se produit avec les deux versions.
  • /usr/lib/libsandbox.1.dylib existe:

    Mothership:~ kuyan$ ls /usr/lib/libsandbox*
    /usr/lib/libsandbox.1.dylib /usr/lib/libsandbox.dylib
    
  • Voici mon / etc / sshd_config . La ligne pertinente semble être UsePrivilegeSeparation: quand décommenté et mettre à la yesplace de sandbox, tout fonctionne A-OK.

  • Bien que je n'utilise pas MacPorts, l'erreur que je reçois est essentiellement celle- ci .
  • version sshd: OpenSSH_6.1p1, OpenSSL 0.9.8r 8 Feb 2011

Lorsque vous configurez OpenSSH avant la construction, vous devez inclure --with-libs="-lsandbox". Les gens de Macports et Homebrew devraient probablement faire de même. En construisant OpenSSH à partir de zéro (voir la section Construire OpenSSH pour OS X? ), Je sais que cela n’est pas inclus dans OS X mais qu’il faut éviter fatal: ssh_sandbox_child: sandbox_init: dlopen(/usr/lib/libsandbox.1.dylib, 261): image not found [preauth]. Je pense aussi que c'est le moyen le plus facile de l'éviter plutôt que de pirater le code source.

Réponses:


3

dtruss montre:

2892/0xdc8e:  stat64("/usr/lib/libsandbox.1.dylib\0", 0x7FFF500DA5F0, 0x7FFF500DB500)        = -1 Err#2

qui est ENOENT (aucun fichier ou répertoire de ce type) et la raison en est probablement que le chroot est déjà arrivé. Si vous êtes assez fou pour expérimenter par

sudo mkdir -p /var/empty/usr/lib
sudo cp /usr/lib/libsandbox.1.dylib /var/empty/usr/lib

Vous déplacerez le crash vers le prochain shlib pas sous / var / empty /

sshd[3256]: fatal: ssh_sandbox_child: sandbox_init: dlopen (/usr/lib/libsandbox.1.dylib, 261):
Library not loaded: /usr/lib/libsqlite3.dylib\\n  Referenced from: /usr/lib/libsandbox.1.dylib\\n  Reason: image not found [preauth]

Si vous persistez avec cette folie

sudo cp /usr/lib/libsqlite3.dylib /usr/lib/libMatch.1.dylib /var/empty/usr/lib/

sshd va recommencer à fonctionner au moins pour les clés SSH, les mots de passe ne fonctionnent toujours pas.

Vous pouvez également éditer /usr/local/etc/sshd_configchanger

UsePrivilegeSeparation sandbox

dans

UsePrivilegeSeparation yes

Mais en dehors des objectifs de débogage, je ne suggère pas d'essayer cela.


1
Pouvez-vous en dire plus sur la raison pour laquelle "UsePrivilegeSeparation yes" est insuffisant? Parce qu’à présent, c’est la seule option (AFAICT) si vous souhaitez utiliser un sshd non standard.
TJ Luoma

"This madness" est le comportement des stocks d'un téléchargement OpenSSH. Je ne pense pas que le gars qui pose la question fasse quelque chose de spécial, mis à part utiliser et construire OpenSSH comme prévu par l'équipe OpenSSH.

1

J'ai corrigé ce problème dans sshd de MacPorts en portant un correctif de sshd d'Apple (disponible à l' adresse http://opensource.apple.com/source/OpenSSH/OpenSSH-186/ ). Apple a déplacé la fonction qui appelle sandbox_init(3)(qui appelle en dlopen(3)interne) avant l' chroot(2)appel qui ferait échouer le chargement de la bibliothèque.

Les patchs requis sont

et openssh doit être construit avec -D__APPLE_SANDBOX_NAMED_EXTERNAL__les drapeaux du préprocesseur.

L'échec de l'authentification avec les mots de passe est dû au fait que OS X ne prend pas en charge les fonctions de bibliothèque requises pour le faire sans utiliser PAM. La définition UsePAM yesde votre sshd_configtravail devrait fonctionner (de même que l'application http://trac.macports.org/browser/trunk/dports/net/openssh/files/pam.patch , qui modifie par défaut l'activation de PAM).


Pourquoi ne pas configurer avec --with-libs="-lsandbox"? C'est beaucoup plus facile que de patcher le code source. La dépendance s'assurera qu'elle libsandboxest chargée dyld(1)au moment du chargement. Il ne sera pas nécessaire de jouer avec le chargement dynamique au mauvais moment.

Je viens d'utiliser les correctifs qu'Apple applique à la copie d'OpenSSH livrée avec OS X. Ils permettent l'utilisation d'un kSBXProfilePureComputationsandbox (peut-être plus spécifique, je ne pouvais pas trouver rapidement la définition réelle ) nommé, qui doit être chargé à runtime et nécessite de déplacer le sandboxing avant le chroot. Il s’agit donc plutôt de (a) prendre en charge un sandbox nommé plutôt que de prendre en charge le sandbox en général, ce qui pourrait être fait avec -lsandbox, et (b) de s’aligner sur le comportement de OpenSSH d’Apple.
Neverpanic
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.