Вопрос

У меня есть следующий скрипт:

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 устанавливает жесткое ограничение 1024 для ограничения nofile, но я не могу понять, как изменить это значение по умолчанию.Я попытался изменить /etc/security/limits.conf и перезапустить sshd, но ошибка все та же.

Это было полезно?

Решение 2

Фианнли нашел ответ:добавьте следующее в /etc/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 (или иным образом включает в себя другой файл, который делает это).

Это должно быть все, что нужно.

В более старых версиях openssh (<3.6 что-то) также была проблема с UsePrivilegeSeparation, которая препятствовала соблюдению ограничений, но она была исправлена ​​в более новых версиях.

ulimit для запуска требуются права суперпользователя.

Я бы посоветовал вам попросить администратора сервера изменить это значение для вас на сервере, на котором вы пытаетесь запустить скрипт.

Он/она может сделать это, изменив /etc/secutiry/limits.conf в Linux.Вот пример, который может помочь:

*               soft    nofile          8192
*               hard    nofile          8192

После этого перезапускать sshd не нужно.Просто выйдите из системы и войдите снова.

Я бы посоветовал вам задать тот же вопрос в Ошибка сервера хотя.Там вы получите лучшие ответы, связанные с серверной частью.

Проверьте сценарии запуска (/etc/profile, ~/.??*) для звонка ulimit.IIRC, как только ограничение будет введено, его больше нельзя будет расширить.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top