我有以下脚本:

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之前,仍然是相同的错误。

有帮助吗?

解决方案 2

Fiannly想出了答案:添加以下到/ etc /启动脚本

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 OD(<3.6的东西)也有与UsePrivilegeSeparation一个问题,即防止被兑现的限制,但它被固定在较新版本。

ulimit需要超级用户权限来运行。

我建议你向服务器管理员来修改值你,你正试图运行该脚本的服务器上。

他/她可以在Linux上修改/etc/secutiry/limits.conf做到这一点。下面是可能帮助的示例:

*               soft    nofile          8192
*               hard    nofile          8192

在这之后,你不需要重新启动ssh。只是注销后再登录。

我建议你尽管问 ServerFault 同样的问题。你会得到更好的服务端的相关答案在那里。

检查启动脚本(/etc/profile~/.??*),用于调用ulimit。 IIRC,一旦限制已经执行的,它不能再扩大。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top