我有以下脚本:
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远程命令执行在nofile限制上强制执行了1024个硬限制,但是我找不到如何修改这个缺省值。我尝试修改/etc/security/limits.conf并重启sshd,仍然是同样的错误。
发布于 2009-12-22 12:03:36
Fiannly找到了答案:将以下内容添加到/etc/initscript中
ulimit -c unlimited
ulimit -HSn 65535
# Execute the program.
eval exec "$4"发布于 2010-11-02 23:12:54
而不是使用/etc/initscript的解决方法(并且不要在该文件中输入错误。:),如果您只想让sshd支持您在/etc/security/limits.conf中所做的设置,则应该确保您在/etc/ssh/sshd_config中具有UsePAM yes,并且/etc/pam.d/sshd列出了session required pam_limits.so (或者以其他方式包括另一个这样做的文件)。
这应该就是全部了。
在旧版本的openssh (<3.6版本)中,UsePrivilegeSeparation也有一个问题,该问题阻止了限制的遵守,但在较新的版本中得到了修复。
发布于 2009-12-11 19:17:11
ulimit需要超级用户权限才能运行。
我建议您请求服务器管理员在您尝试运行脚本的服务器上为您修改该值。
他/她可以通过在Linux上修改/etc/secutiry/limits.conf来实现这一点。下面是一个可能会有所帮助的示例:
* soft nofile 8192
* hard nofile 8192在此之后,您不需要重新启动sshd。只需注销并重新登录即可。
不过,我建议你在ServerFault中问同样的问题。您将在那里获得更好的与服务器端相关的答案。
https://stackoverflow.com/questions/1887365
复制相似问题