2009-12-11 14 views
5

Tengo el siguiente guión:ssh ejecución remota de comandos y ulimit

cat > /tmp/script.sh <<EndOfScript 
#!/bin/sh 
ulimit -n 8192 
run_app 
EndOfScript 

el 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 [email protected]:/tmp/script.sh 
ssh [email protected] "chmod 755 /tmp/script.sh; /tmp/script.sh" 

que tiene el error:

ulimit: open files: cannot modify limit: Operation not permitted 

También probé el siguiente comando:

ssh [email protected] "ulimit -n 8192" 

mismo error.

Parece que la ejecución del comando remoto ssh está imponiendo un límite estricto de 1024 en el límite nofile, pero no puedo encontrar la manera de modificar este valor predeterminado. Traté de modificar /etc/security/limits.conf y reiniciar sshd, sigue siendo el mismo error.

+1

Finalmente encontré la respuesta correcta: agregue lo siguiente a/etc/initscript: ulimit -c unlimited ulimit -HSn 65535 # Ejecute el programa. eval exec "$ 4" –

Respuesta

3

Fiannly descubierto la respuesta: añadir lo siguiente a/etc/initscript

ulimit -c unlimited 
ulimit -HSn 65535 
# Execute the program. 
eval exec "$4" 
+0

Gracias por esto. Extrañamente no puedo encontrar las opciones -H y -S en la página del manual de ulimit. – smartnut007

2

ulimit requiere privilegios de superusuario para ejecutarse.

Le sugiero que solicite al administrador del servidor que modifique ese valor para usted en el servidor en el que intenta ejecutar el script.

Él/Ella puede hacer eso modificando /etc/secutiry/limits.conf en Linux. Aquí hay un ejemplo que podría ayudar:

*    soft nofile   8192 
*    hard nofile   8192 

Después de eso, no necesita reiniciar sshd. Simplemente cierre la sesión e inicie sesión de nuevo.

Le sugiero que haga la misma pregunta en ServerFault. Aquí obtendrá mejores respuestas relacionadas con el servidor.

+1

Modifiqué /etc/security/limits.conf, reinicié sshd, incluso reinicié la máquina. Todavía no se puede obtener un límite de nofile mayor a 1024. –

+0

¿Puedes publicar la línea relevante en tus limits.conf? Puede contener un error.Tenga en cuenta que el proceso sshd necesita tener el ulimit aplicado, así que verifique si no hay configuración de ulimit en sus scripts de inicio, etc. – wds

+0

Agregué lo que desea a la respuesta. –

0

Compruebe los scripts de inicio (/etc/profile, ~/.??*) para una llamada al ulimit. IIRC, una vez que se ha impuesto un límite, ya no se puede ensanchar.

+0

¿Se reiniciará restablecer el límite? – mcandre

+0

Solo cuando el comando 'ulimit' no se ejecuta durante el inicio. Si crea una nueva ventana de shell, 'ulimit' solo está activo para este shell y todos los elementos secundarios. En este caso, iniciar una nueva ventana de shell ya crea una sesión sin límites nuevamente. Si el 'ulimit' está en un script de inicio, todas las shells se ven afectadas antes de que pueda hacer algo, por lo que un reinicio no ayudará. Tienes que deshabilitar el comando, primero. –

11

En lugar de utilizar la solución de /etc/initscript (y no hacen un error tipográfico en ese archivo .. :), si sólo quiere sshd para cumplir con la configuración que hizo en /etc/security/limits.conf, debe asegurarse de que tiene UsePAM yes en /etc/ssh/sshd_config, y /etc/pam.d/sshd listas (o de lo contrario incluye otro archivo que lo hace).

Eso debería ser todo lo que hay que hacer.

En versiones anteriores od openssh (< 3.6 algo) también había un problema con UsePrivilegeSeparation que impedía que se respetasen los límites, pero se solucionó en las versiones más recientes.

+1

comprobó ambos archivos para esas líneas y estaban presentes. Funcionando en OpenSSH_5.8p1 Debian-7ubuntu1, OpenSSL 1.0.0e 6 de septiembre de 2011. Todavía el mismo problema que OP: | – kellogs

+0

He estado buscando esta información por edades, ¡gracias! –

+0

He estado buscando e intentando diferentes soluciones por varios días y "UsePAM yes" en/etc/ssh/sshd_config es exactamente lo que me faltaba. Muchas gracias! –

Cuestiones relacionadas