удаленное выполнение команд ssh и 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 устанавливает жесткое ограничение 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, как только ограничение будет введено, его больше нельзя будет расширить.