3 votes

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

Lorsque j'essaie de me connecter en SSH à mon ordinateur, ssh échoue avec cette erreur :

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

Cela se produit également lorsque j'essaie de me connecter en SSH à mon utilisateur depuis 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]

Informations pertinentes :

  • J'utilise une version de sshd différente de celle fournie par OS X, installée par l'intermédiaire de 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 : lorsqu'il est décommenté et qu'il prend la valeur yes au lieu de sandbox tout fonctionne A-OK.

  • Bien que je n'utilise pas MacPorts, l'erreur que j'obtiens est essentiellement la suivante aquí .

  • version de sshd : OpenSSH_6.1p1, OpenSSL 0.9.8r 8 Feb 2011

0 votes

Quand vous configurez OpenSSH avant la construction, vous devez inclure --with-libs="-lsandbox" . Les gens de Macports et Homebrew devraient probablement faire de même. De la construction d'OpenSSH à partir de zéro (voir Construire OpenSSH pour OS X ? ), je sais qu'il n'est pas inclus dans OS X mais il est nécessaire pour é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 simple de l'éviter plutôt que de pirater le code source.

3voto

Dtruss montre :

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

qui est ENOENT (No such file or directory) et la raison est probablement que le chroot a déjà eu lieu. Si vous êtes assez stupide 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 qui n'est 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 dans 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 modifier /usr/local/etc/sshd_config en changeant

UsePrivilegeSeparation sandbox

en

UsePrivilegeSeparation yes

Mais en dehors du débogage, je ne vous conseille pas d'essayer tout cela.

1 votes

Pouvez-vous nous expliquer pourquoi 'UsePrivilegeSeparation yes' est insuffisant ? Parce qu'actuellement, c'est la seule option (AFAICT) si vous voulez utiliser un sshd non standard.

0 votes

"Cette folie" est le comportement habituel d'un téléchargement d'OpenSSH. Je ne pense pas que le gars qui pose la question fasse quelque chose de spécial, autre que d'utiliser et de construire OpenSSH comme prévu par l'équipe OpenSSH.

1voto

Ibrahim Points 1

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

Les correctifs requis sont

et openssh doit être construit avec -D__APPLE_SANDBOX_NAMED_EXTERNAL__ dans les drapeaux du préprocesseur.

L'impossibilité de s'authentifier avec des mots de passe est due au fait que OS X ne prend pas en charge les fonctions de bibliothèque nécessaires pour le faire sans utiliser PAM. Configuration de UsePAM yes dans votre sshd_config devrait fonctionner (tout comme l'application http://trac.macports.org/browser/trunk/dports/net/openssh/files/pam.patch qui change la valeur par défaut pour activer PAM).

0 votes

Pourquoi ne pas configurer avec --with-libs="-lsandbox" ? C'est beaucoup plus facile que Parcheando le code source. La dépendance assurera libsandbox est chargé par dyld(1) au moment du chargement. Il n'y aura pas besoin de s'embêter avec un chargement dynamique au mauvais moment.

0 votes

Je viens d'utiliser les correctifs qu'Apple applique à la copie d'OpenSSH qu'ils fournissent avec OS X. Ils permettent l'utilisation d'un (peut-être plus spécifique, je n'ai pas pu trouver rapidement la définition réelle de kSBXProfilePureComputation ) nommé sandbox, qui doit être chargé au moment de l'exécution et nécessite de déplacer le sandboxing avant le chroot. Il s'agit donc plus de (a) supporter un sandbox nommé plutôt que de supporter le sandboxing en général, ce qui pourrait être fait avec -lsandbox et (b) s'aligner sur le comportement d'OpenSSH d'Apple.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X