ruby Capistrano部署失败,原因是与消息太长和文件描述符相关的SSH错误

ifsvaxew  于 2023-08-04  发布在  Ruby
关注(0)|答案(1)|浏览(109)

我有一个问题时,部署一个项目5服务器我有. SSHD服务器版本是OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017,因为它是CentOS服务器,升级SSHD服务和从源代码编译不是一个选项
重要的SSHD服务配置:

TCPKeepAlive yes
UseDns no
Protocol 2

字符串
在使用Capistrano进行部署时,有些步骤会通过,直到进入执行/usr/sbin/restorecon -R /u/apps/my_app/releases/20230724100000的步骤restorecon
我得到了不同的错误:

mm_receive_fd: recvmsg: Message too long
mux_master_process_stdio_fwd: failed to receive fd 0 from client
mux_client_request_stdio_fwd: read from master failed: Broken pipe
channel_post_mux_listener: accept: Too many open files
muxclient: master hello exchange failed
mm_receive_fd: recvmsg: Message too long
mux_master_process_stdio_fwd: failed to receive fd 0 from client
mux_client_request_stdio_fwd: read from master failed: Broken pipe
Caused by:
Net::SSH::Proxy::ConnectError: command failed: ssh rorra@bastion.mydomain.com -o ConnectTimeout=60 -o ControlMaster=auto -o ControlPath=/tmp/sshrorra@bastion.mydomain.com -W server01.mydomain.com:\22

的数据
我试图删除ControlMaster,但没有工作。我还将ControlMaster设置为none,但它会在Capistrano的每一步都要求凭据,这可能会花费太多时间和命令
我尝试重新启动OpenSSH服务:

sudo systemctl restart sshd.service


但是得到了同样的错误

ej83mcc0

ej83mcc01#

在检查了所有服务器上的所有内容、不同用户的不同限制、内核配置上的文件描述符限制等等之后,我发现问题实际上出在我的桌面上
通过使用ulimit -n检查桌面上的限制,我看到Ventura OS Limit为256,这是允许的文件描述符数量的一个非常低的数字
按照this link上的说明操作,我能够更新系统上的文件描述符数量,并顺利部署

  1. Boot 进入恢复模式,选择选项,然后使用您的用户登录
    1.从菜单中打开终端并运行:csrutil clear
    1.关机。2 Boot 进入恢复模式,选择选项,然后用您用户登录
    1.从菜单中选择终端并运行:csrutil disable
    1.正常 Boot ,编辑/Library/LaunchDaemons/limit.maxfiles.plist并将内容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
    <key>Label</key>
    <string>limit.maxfiles</string>
    <key>ProgramArguments</key>
    <array>
        <string>launchctl</string>
        <string>limit</string>
        <string>maxfiles</string>
        <string>64000</string>
        <string>524288</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>ServiceIPC</key>
    <false/>
    </dict>
</plist>

字符串

  1. Boot 进入恢复模式,选择选项,然后使用您的用户登录
    1.从菜单中选择终端并运行:csrutil enable(这是一个非常重要的步骤,因为它将启用macosx系统完整性保护)
  2. reboot,execute:ulimit -n,您现在应该看到64.000,任何与问题相关的消息太长,fd控制台消息或部署或ssh到服务器期间的任何内容都应该消失

相关问题