7

我有以下脚本:

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

4

4 回答 4

13

如果/etc/initscript您只想sshd遵守/etc/security/limits.confUsePAM yes/etc/ssh/sshd_config_ /etc/pam.d/sshd_session required pam_limits.so这样做)。

这应该就是它的全部了。

在旧版本 od openssh(<3.6 的东西)中,UsePrivilegeSeparation 也存在一个问题,该问题阻止了限制被兑现,但它在较新的版本中得到了修复。

于 2010-11-02T15:12:54.453 回答
4

Finnly 想出了答案:将以下内容添加到 /etc/initscript

ulimit -c unlimited
ulimit -HSn 65535
# Execute the program.
eval exec "$4"
于 2009-12-22T04:03:35.613 回答
2

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

我建议您让服务器管理员在您尝试运行脚本的服务器上为您修改该值。

他/她可以通过修改 Linux 上的 /etc/secutiry/limits.conf 来做到这一点。这是一个可能有帮助的例子:

*               soft    nofile          8192
*               hard    nofile          8192

之后,您不需要重新启动 sshd。只需注销并再次登录。

不过,我建议您在ServerFault中提出相同的问题。您将在那里获得更好的与服务器端相关的答案。

于 2009-12-11T11:17:10.663 回答
1

检查启动脚本 ( /etc/profile, ~/.??*) 是否调用ulimit. IIRC,一旦施加了限制,就不能再扩大了。

于 2009-12-11T11:42:38.437 回答