题
我有以下脚本:
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,一旦限制已经执行的,它不能再扩大。
不隶属于 StackOverflow