¿Cómo compilo OpenSSH usando el OpenSSL actualizado en OS X? ¿Dónde encuentro las instrucciones?
Grawity estaba en lo correcto, descargué el OpenSSH incorrecto. Necesitaba una portátil, y no la provista en el enlace FTP. Los portátiles están listados en la parte inferior de OpenSSH portátil .
Una vez que tenga el portátil, descomprima y luego realice lo siguiente. Lo siguiente asume que tienes un OpenSSL actualizado libcrypto instalado en /usr/local/ssl/darwin y un Zlib actualizado libz a /usr/local. Ajústalos a tu gusto.
Reemplace -lz con ruta absoluta para archivar
Esto es necesario para asegurar el enlace estático porque no hay una opción aparente para ello en configure. Cuando se construye el binario, otool -L mostrará que no hay dependencias Zlib externas.
$ grep "\-lz" *
configure:{ echo "$as_me:$LINENO: checking for deflate in -lz" >&5
configure:echo $ECHO_N "checking for deflate in -lz... $ECHO_C" >&6; }
configure:LIBS="-lz $LIBS"
configure: LIBS="-lz $LIBS"
configure: LIBS="$LIBS -lz"
configure.ac: LIBS="$LIBS -lz"
Entonces:
$ sed -i "" 's|-lz|/usr/local/lib/libz.a|g' config.h.in configure configure.ac
$
Reemplace -lcrypto con una ruta absoluta para archivar
Esto es necesario para asegurar el enlace estático porque no hay una opción aparente para ello en configure. Cuando se construye el binario, otool -L mostrará que no hay dependencias externas de OpenSSL.
$ grep "\-lcrypto" *
configure: LIBS="-lcrypto $LIBS"
configure.ac: LIBS="-lcrypto $LIBS"
Entonces:
$ sed -i "" 's|-lcrypto|/usr/local/ssl/darwin/lib/libcrypto.a|g' configure configure.ac
$
En lo anterior, utilizo /usr/local/ssl/darwin como --openssldir Al construir la biblioteca OpenSSL. Es generalmente justo /usr/local/ssl. Ajústelo según sea necesario.
Configurar OpenSSH
Configure OpenSSH con las rutas necesarias. Es posible que deba incluir una biblioteca OS X, también.
Si find /usr/lib/ -name libsandbox* devoluciones libsandbox.dylib, entonces necesitas incluir --with-libs="-lsandbox. Falta en OS X 10.5, pero está presente en OS X 10.8. Si la biblioteca está presente pero --with-libs se omite, entonces se producirá un error similar a riemann.local sshd[15748]: fatal: ssh_sandbox_child: sandbox_init: dlopen(/usr/lib/libsandbox.1.dylib, 261): image not found [preauth].
$ ./configure --without-ssh1 --with-ssl-dir=/usr/local/ssl/darwin --with-zlib=/usr/local \
--with-libs="-lsandbox" --prefix=/usr/local
checking for gcc... gcc
checking for C compiler default output file name... a.out
...
OpenSSH has been configured with the following options:
User binaries: /usr/local/bin
System binaries: /usr/local/sbin
Configuration files: /usr/local/etc
...
Host: x86_64-apple-darwin12.6.0
Compiler: gcc
Compiler flags: -g -O2 -Qunused-arguments -Wunknown-warning-option -Wall -Wpointer-arith
-Wuninitialized -Wsign-compare -Wformat-security -Wsizeof-pointer-memaccess
-Wno-pointer-sign -Wno-unused-result -fno-strict-aliasing -D_FORTIFY_SOURCE=2
-ftrapv -fno-builtin-memset -fstack-protector-all -fPIE
Preprocessor flags: -I/usr/local/ssl/darwin/include -I/usr/local/include
Linker flags: -L/usr/local/ssl/darwin/lib -L/usr/local/lib -fstack-protector-all -pie
Libraries: /usr/local/ssl/darwin/lib/libcrypto.a /usr/local/lib/libz.a -lsandbox -lresolv
Puede que necesites --with-pam para obtener la autenticación de contraseña de trabajo. No me preocupaba la función, por lo que no agregué la opción de configuración.
Construir e instalar OpenSSH
los -fwrapv es algo preocupante cuando se ve en software de alta integridad. Eso generalmente significa que hay una Programa C ilegal con comportamiento indefinido. en marcha. Los desarrolladores no lo han arreglado, por lo que usan -fwrapv como curita .
$ make
conffile=`echo sshd_config.out | sed 's/.out$//'`; \
...
gcc -g -O2 -Qunused-arguments -Wunknown-warning-option -Wall -Wpointer-arith -Wuninitialized
-Wsign-compare -Wformat-security -Wsizeof-pointer-memaccess -Wno-pointer-sign
-Wno-unused-result -fno-strict-aliasing -D_FORTIFY_SOURCE=2 -ftrapv -fno-builtin-memset
-fstack-protector-all -fPIE -I. -I.. -I. -I./.. -I/usr/local/ssl/darwin/include
-I/usr/local/include -DHAVE_CONFIG_H -c arc4random.c
gcc -g -O2 -Qunused-arguments -Wunknown-warning-option -Wall -Wpointer-arith -Wuninitialized
-Wsign-compare -Wformat-security -Wsizeof-pointer-memaccess -Wno-pointer-sign
-Wno-unused-result -fno-strict-aliasing -D_FORTIFY_SOURCE=2 -ftrapv -fno-builtin-memset
-fstack-protector-all -fPIE -I. -I.. -I. -I./.. -I/usr/local/ssl/darwin/include
-I/usr/local/include -DHAVE_CONFIG_H -c bsd-asprintf.c
...
Las dependencias externas (o la falta de ellas) se pueden verificar con:
$ otool -L ./sshd
./sshd:
/usr/lib/libsandbox.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libresolv.9.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
Desafortunadamente no hay make check o make test objetivos, por lo que no hay forma aparente de probar el software antes de instalarlo.
$ sudo make install
...
Generating public/private ed25519 key pair.
Your identification has been saved in /usr/local/etc/ssh_host_ed25519_key.
Your public key has been saved in /usr/local/etc/ssh_host_ed25519_key.pub.
The key fingerprint is:
SHA256:u/xQ6haFqxjG0fBgSMt0W58N8zmhu+NmyQxNMkMcwPc [email protected]
The key's randomart image is:
+--[ED25519 256]--+
| .ooooo.o . |
| o.o=o+. B o |
| o..B .+.= |
| . * E... |
| . . *So. |
| + . += |
| . o =*o |
| . .+B+ |
| +=.. |
+----[SHA256]-----+
...
Crear una lista para el nuevo binario SSH
Lo siguiente utiliza el existente ssh.plist, elimina la secuencia de comandos de contenedor de Apple y cambia el número de puerto. Copiarlo a /System/Library/LaunchDaemons/ssh-7.1.plist.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Disabled</key>
<true/>
<key>Label</key>
<string>com.openssh.sshd.7-1</string>
<key>Program</key>
<string>/usr/local/sbin/sshd</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/sbin/sshd</string>
<string>-i</string>
<string>-e</string>
<string>-f</string>
<string>/usr/local/etc/sshd_config</string>
<string>-o</string>
<string>PidFile=/var/run/sshd-7.1.pid</string>
</array>
<key>Sockets</key>
<dict>
<key>Listeners</key>
<dict>
<key>SockServiceName</key>
<string>1522</string>
</dict>
</dict>
<key>inetdCompatibility</key>
<dict>
<key>Wait</key>
<false/>
</dict>
<key>StandardErrorPath</key>
<string>/var/log/sshd-7.1.log</string>
<key>SHAuthorizationRight</key>
<string>system.preferences</string>
</dict>
</plist>
Hay algunas cosas que suceden en la lista:
- la etiqueta de servicio se cambió a
com.openssh.sshd.7-1 para evitar chocar con los de Apple com.openssh.sshd
- el archivo PID fue cambiado a
var/run/sshd-7.1.pid para evitar chocar con los de Apple var/run/sshd.pid
- El camino absoluto del programa fue incluido en
ProgramArguments debido a un sshd re-exec requires execution with an absolute path mientras se atienden conexiones de clientes
sshd_config Se llama específicamente para evitar preguntas abiertas y confusión. Pero se usa por defecto
- el uso del -
i opción a pesar de que es una inetd(8) opción. De acuerdo a Opción sshd y -i en OS X , debe ser utilizado
Inicia el nuevo servicio SSH.
Usa launchd para iniciar el servicio. Note el uso de -w para evitar el "nada encontrado para cargar" mensaje de error porque el servicio está deshabilitado.
$ sudo launchctl load -w /System/Library/LaunchDaemons/ssh-7.1.plist
Finalmente, verifique que el nuevo servidor SSH esté funcionando:
$ netstat -an | grep 1522
tcp6 0 0 *.1522 *.* LISTEN
tcp4 0 0 *.1522 *.* LISTEN
./configure ... && make, pero creo que lo tenemos No me gusta elsshd.chack, pero creo que es lo mejor / lo más fácil hasta que el desarrollador de OpenSSH solucione el problema. Gracias por la ayuda.