ejecución remota de comandos ssh y ulimit
Pregunta
Tengo el siguiente script:
cat > /tmp/script.sh <<EndOfScript
#!/bin/sh
ulimit -n 8192
run_app
EndOfScript
, que se ejecuta sin problemas a nivel local, que siempre está bien. Pero si trato de ejecutar de forma remota a través de SSH:
scp /tmp/script.sh user@host:/tmp/script.sh
ssh user@host "chmod 755 /tmp/script.sh; /tmp/script.sh"
Tengo el error:
ulimit: open files: cannot modify limit: Operation not permitted
También probé el siguiente comando:
ssh user@host "ulimit -n 8192"
mismo error.
Parece que la ejecución remota de comandos ssh está imponiendo un límite duro 1024 sobre el límite nofile, pero no puedo encontrar la manera de modificar este valor predeterminado. He intentado modificar /etc/security/limits.conf y sshd restart, sigue siendo el mismo error.
Solución 2
Fiannly descubierto la respuesta: añadir lo siguiente a / etc / script de inicio
ulimit -c unlimited
ulimit -HSn 65535
# Execute the program.
eval exec "$4"
Otros consejos
En lugar de utilizar la solución de /etc/initscript
(y no cometa un error tipográfico en ese archivo .. :), si lo que desea sshd
en honor a los ajustes realizados en /etc/security/limits.conf
, usted debe asegurarse de que ha UsePAM yes
en /etc/ssh/sshd_config
, y listas /etc/pam.d/sshd
session required pam_limits.so
(o de otra manera incluye otro archivo que lo hace).
Eso debería ser todo lo que hay que hacer.
En versiones anteriores desde OpenSSH (<3.6 algo) también hubo un problema con UsePrivilegeSeparation que impidieron límites siendo honrados, pero lo arreglaron en las últimas versiones.
ulimit
requiere privilegios de superusuario para funcionar.
Yo sugeriría que pedir al administrador del servidor para modificar ese valor para usted en el servidor que está intentando ejecutar el script en.
El / ella puede hacer que modificando /etc/secutiry/limits.conf en Linux. Aquí está un ejemplo que puede ayudar a:
* soft nofile 8192
* hard nofile 8192
Después de eso, no es necesario reiniciar sshd. Sólo iniciar sesión otra vez.
Yo sugeriría que usted pueda hacer la misma pregunta en ServerFault sin embargo. Usted obtendrá mejor del lado del servidor respuestas relacionadas allí.
Comprobar los guiones de puesta en marcha (/etc/profile
, ~/.??*
) para una llamada a ulimit
. IIRC, una vez que se ha impuesto un límite, no puede ampliarse más.