ssh远程命令执行和ulimit

时间:2009-12-11 11:10:52

标签: linux 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远程命令执行对nofile限制强制执行1024次硬限制,但我无法找到如何修改此默认值。我试图修改/etc/security/limits.conf并重启sshd,仍然是同样的错误。

4 个答案:

答案 0 :(得分:11)

而不是使用/etc/initscript的解决方法(并且不要在该文件中输入错误... :),如果您只是希望sshd兑现您在/etc/security/limits.conf中所做的设置,您应该确保UsePAM yes中有/etc/ssh/sshd_config/etc/pam.d/sshd列出session required pam_limits.so(或者包含其他文件)。

这应该就是它的全部内容。

在早期版本的od openssh(&lt; 3.6 something)中,UsePrivilegeSeparation也存在一个问题,它阻止了限制,但它在较新版本中得到修复。

答案 1 :(得分:3)

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

ulimit -c unlimited
ulimit -HSn 65535
# Execute the program.
eval exec "$4"

答案 2 :(得分:2)

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

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

他/她可以通过在Linux上修改/etc/secutiry/limits.conf来实现。以下是一个可能有用的示例:

*               soft    nofile          8192
*               hard    nofile          8192

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

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

答案 3 :(得分:0)

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