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 à layes
place desandbox
, 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
mountain-lion
ssh
homebrew
Natan
la source
la source
--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 éviterfatal: 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:
dtruss montre:
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
Vous déplacerez le crash vers le prochain shlib pas sous / var / empty /
Si vous persistez avec cette folie
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_config
changerdans
Mais en dehors des objectifs de débogage, je ne suggère pas d'essayer cela.
la source
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 endlopen(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 yes
de votresshd_config
travail 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).la source
--with-libs="-lsandbox"
? C'est beaucoup plus facile que de patcher le code source. La dépendance s'assurera qu'ellelibsandbox
est chargéedyld(1)
au moment du chargement. Il ne sera pas nécessaire de jouer avec le chargement dynamique au mauvais moment.kSBXProfilePureComputation
sandbox (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.