SSH تنفيذ الأمر Remote and ulimit
سؤال
لدي البرنامج النصي التالي:
cat > /tmp/script.sh <<EndOfScript
#!/bin/sh
ulimit -n 8192
run_app
EndOfScript
الذي يعمل بسلاسة محليا، هو دائما موافق. ولكن إذا حاولت تشغيله عن بعد من خلال SSH:
scp /tmp/script.sh user@host:/tmp/script.sh
ssh user@host "chmod 755 /tmp/script.sh; /tmp/script.sh"
حصلت على الخطأ:
ulimit: open files: cannot modify limit: Operation not permitted
لقد جربت أيضا الأمر التالي:
ssh user@host "ulimit -n 8192"
نفس الخطأ.
يبدو أن تنفيذ الأمر SSH بعيد SSH يطبق حد ثابت 1024 على حد NOFILE، لكن لا يمكنني معرفة كيفية تعديل هذه القيمة الافتراضية. حاولت تعديل /etc/Security/limits.conf وإعادة تشغيل SSHD، لا يزال الخطأ نفسه.
المحلول 2
اكتشف Fiannly الجواب: أضف ما يلي / إلخ / initscript
ulimit -c unlimited
ulimit -HSn 65535
# Execute the program.
eval exec "$4"
نصائح أخرى
بدلا من استخدام الحل /etc/initscript
(ولا تجعل الخطأ المطبعي في هذا الملف .. :)، إذا كنت تريد فقط sshd
لتكريم الإعدادات التي قدمتها في /etc/security/limits.conf
, ، يجب عليك التأكد من أن لديك UsePAM yes
في /etc/ssh/sshd_config
, ، و /etc/pam.d/sshd
قوائم session required pam_limits.so
(أو يتضمن خلاف ذلك ملف آخر يفعل ذلك).
يجب أن يكون كل شيء هناك.
في الإصدارات القديمة OD ODSSHSH (<3.6 شيء ما) كانت هناك أيضا مشكلة في الاستخدام المسدود الذي يمنع الحدود التي يتم تكريمها، ولكن تم إصلاحه في إصدارات أحدث.
ulimit
يتطلب امتيازات Superuser لتشغيل.
أود أن أقترح عليك أن تطلب من مسؤول الخادم تعديل هذه القيمة لك على الخادم الذي تحاول تشغيل البرنامج النصي.
هو / هي يمكن أن تفعل ذلك عن طريق تعديل /etc/secutiry/limits.conf على لينكس. هنا مثال قد يساعد:
* soft nofile 8192
* hard nofile 8192
بعد ذلك، لا تحتاج إلى إعادة تشغيل SSHD. مجرد تسجيل الخروج وتسجيل الدخول مرة أخرى.
أود أن أقترح عليك أن تسأل نفس السؤال في ServerFault. رغم ذلك. سوف تحصل على إجابات أفضل من جانب الخادم هناك.
تحقق من البرامج النصية للبدء (/etc/profile
, ~/.??*
) للحصول على دعوة إلى ulimit
. وبعد IIRC، بمجرد فرض الحد، لا يمكن اتساعه بعد الآن.