【问题标题】:ssh remote command execution and ulimitssh远程命令执行和ulimit
【发布时间】:2010-12-25 15:12:49
【问题描述】:

我有以下脚本:

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,还是一样的错误。

【问题讨论】:

  • 终于找到了正确答案:在/etc/initscript中加入: ulimit -c unlimited ulimit -HSn 65535 # 执行程序。 eval exec "$4"

标签: linux ssh ulimit


【解决方案1】:

不要使用/etc/initscript 的解决方法(并且不要在该文件中打错字.. :),如果您只想让sshd 遵循您在/etc/security/limits.conf 中所做的设置,您应该确保您在/etc/ssh/sshd_config 中有UsePAM yes,并且/etc/pam.d/sshd 列出session required pam_limits.so(或以其他方式包含这样做的另一个文件)。

应该就是这些了。

在旧版本 od openssh(

【讨论】:

  • 检查了这两个文件中的这些行并且它们都存在。在 OpenSSH_5.8p1 Debian-7ubuntu1,OpenSSL 1.0.0e 2011 年 9 月 6 日运行。仍然与 OP 相同的问题:|
  • 我一直在寻找这条信息很久了 - 谢谢!
  • 我这几天一直在寻找并尝试不同的修复程序,而 /etc/ssh/sshd_config 中的“UsePAM yes”正是我所缺少的。非常感谢!
【解决方案2】:

终于找到了答案:将以下内容添加到 /etc/initscript

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

【讨论】:

  • 谢谢。奇怪的是,我在 ulimit 手册页上找不到选项 -H 和 -S。
【解决方案3】:

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

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

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

*               soft    nofile          8192
*               hard    nofile          8192

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

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

【讨论】:

  • 我修改了/etc/security/limits.conf,重启了sshd,甚至重启了机器。仍然无法获得大于 1024 的 nofile 限制。
  • 您可以在您的limits.conf 中发布相关行吗?它可能包含错误。请记住,sshd 进程需要对其应用 ulimit,因此请检查其启动脚本等中是否没有设置 ulimit。
  • 我在答案中添加了你想要的内容。
【解决方案4】:

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

【讨论】:

  • 重启会重置限制吗?
  • 只有在启动过程中没有执行ulimit 命令时。如果您创建一个新的 shell 窗口,ulimit 只对这个 shell 和所有子 shell 有效。在这种情况下,启动一个新的 shell 窗口已经再次创建了一个无限制的会话。 ulimit 在启动脚本中,在您执行任何操作之前所有 shell 都会受到影响,因此重新启动将无济于事。您必须先禁用该命令。
猜你喜欢
  • 2015-03-29
  • 1970-01-01
  • 1970-01-01
  • 2020-12-04
  • 2017-02-08
  • 2011-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多