2009-12-11 6 views
5

Je le script suivant:ssh exécution de la commande à distance et ulimit

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

qui fonctionne bien au niveau local, il est toujours correct. Mais si je tente de l'exécuter à distance via ssh:

scp /tmp/script.sh [email protected]:/tmp/script.sh 
ssh [email protected] "chmod 755 /tmp/script.sh; /tmp/script.sh" 

j'ai eu l'erreur:

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

J'ai aussi essayé la commande suivante:

ssh [email protected] "ulimit -n 8192" 

même erreur.

Il semble que l'exécution de la commande à distance ssh impose une limite stricte de 1024 sur la limite du fichier, mais je ne trouve pas comment modifier cette valeur par défaut. J'ai essayé de modifier /etc/security/limits.conf et de redémarrer sshd, toujours la même erreur.

+1

Enfin, je trouve la bonne réponse: ajouter ce qui suit à/etc/initscript: ulimit -c unlimited ulimit -HSn 65535 # exécuter le programme. eval exec "$ 4" –

Répondre

3

Fiannly compris la réponse: ajouter ce qui suit à/etc/initscript

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

Merci pour votre aide. Bizarrement, je ne trouve pas les options -H et -S sur la page de manuel ulimit. – smartnut007

2

ulimit requiert les privilèges de super-utilisateur pour s'exécuter.

Je vous suggère de demander à l'administrateur du serveur de modifier cette valeur pour vous sur le serveur sur lequel vous essayez d'exécuter le script. Il peut le faire en modifiant /etc/secutiry/limits.conf sous Linux. Voici un exemple qui pourrait aider:

*    soft nofile   8192 
*    hard nofile   8192 

Après cela, vous n'avez pas besoin de redémarrer sshd. Déconnectez-vous et connectez-vous à nouveau.

Je vous suggère cependant de poser la même question au ServerFault. Vous obtiendrez de meilleures réponses connexes côté serveur là-bas.

+1

J'ai modifié /etc/security/limits.conf, redémarré sshd, même redémarré la machine. Vous ne pouvez toujours pas obtenir une limite de fichier supérieure à 1024. –

+0

Pouvez-vous publier la ligne correspondante dans votre fichier limits.conf? Il pourrait contenir une erreur.Gardez à l'esprit que le processus sshd doit avoir l'ulimit qui lui est appliqué, donc vérifiez s'il n'y a pas de paramètre d'ulimit dans ses scripts de démarrage, etc. – wds

+0

J'ai ajouté ce que vous voulez à la réponse. –

0

Vérifiez les scripts de démarrage (/etc/profile, ~/.??*) pour un appel à ulimit. IIRC, une fois qu'une limite a été imposée, elle ne peut plus être élargie.

+0

Un redémarrage réinitialisera-t-il la limite? – mcandre

+0

Seulement lorsque la commande 'ulimit' n'est pas exécutée au démarrage. Si vous créez une nouvelle fenêtre shell, le 'ulimit' n'est actif que pour ce shell et tous les enfants. Dans ce cas, le démarrage d'une nouvelle fenêtre shell crée à nouveau une session sans limite. Le 'ulimit' est dans un script de démarrage, tous les shells sont affectés avant que vous puissiez faire quelque chose, donc un redémarrage n'aidera pas. Vous devez d'abord désactiver la commande. –

11

Au lieu d'utiliser la solution de contournement de /etc/initscript (et ne fait pas une faute de frappe dans ce fichier .. :), si vous venez veulent-sshd pour honorer les réglages effectués à la /etc/security/limits.conf, vous devez vous assurer que vous avez UsePAM yes dans /etc/ssh/sshd_config et /etc/pam.d/sshd listes session required pam_limits.so (ou un autre fichier comprend par ailleurs qui le fait).

Cela devrait être tout ce qu'il ya à faire.

Dans les anciennes versions de openssh (< 3.6 quelque chose) il y avait aussi un problème avec UsePrivilegeSeparation qui empêchait les limites d'être respectées, mais il était corrigé dans les versions plus récentes.

+1

vérifié les deux fichiers pour ces lignes et ils étaient présents. En cours d'exécution sur OpenSSH_5.8p1 Debian-7ubuntu1, OpenSSL 1.0.0e 6 sept. 2011. Toujours le même problème que OP: | – kellogs

+0

Je cherche cette information depuis des lustres - merci! –

+0

J'ai cherché et essayé différents correctifs depuis des jours et "UsePAM yes" dans/etc/ssh/sshd_config est exactement ce qui me manquait. Merci beaucoup! –

Questions connexes