【问题标题】:SFTP on linux server gives error "Received message too long" [closed]Linux服务器上的SFTP给出错误“收到的消息太长”[关闭]
【发布时间】:2011-11-23 23:15:48
【问题描述】:

我最近尝试使用 sftp 访问我的 linux 机器,我在其中实现了自己的简单 shell。我将除root用户之外的用户设置为默认使用我的shell(通过编辑/etc/passwd文件)。那么问题来了,一旦我尝试通过sftp访问,我会收到一条消息说:

收到的消息太长

我搜索了解决方案,其中一个 解决方案是将此用户的默认 shell 更改回普通 bash shell。我试过了,它奏效了,问题是有没有办法我仍然可以使用我自己的 shell 并允许 sftp 通过?请回答我更多详细信息,例如我应该编辑哪个文件等

【问题讨论】:

    标签: linux sftp


    【解决方案1】:

    将您的服务器配置为使用内部 sftp 服务器,将以下指令添加到 /etc/ssh/sshd_config

    Subsystem sftp internal-sftp
    

    这样,它就不会使用用户 shell 来启动 sftp 服务器程序。

    【讨论】:

    • 工作得很好,谢谢。我还必须添加一个 sudo service sshd restart 并重新启动我的 sftp 守护进程 (sudo service vsftpd restart) 以取得良好的效果。
    • 谢谢;正是我想要的!
    【解决方案2】:

    “Received message too long”表示您的 SFTP 客户端从 SFTP 服务器接收到错误数据。典型的原因是服务器上的 shell 启动脚本(.bashrc、.profile、.cshrc 等)正在产生一些输出,而您的 SFTP 客户端正试图将该输出解析为 SFTP 消息。您可以通过运行以下命令来检查:

    ssh user@remote 'echo hello'
    

    如果这会产生除“hello”以外的任何输出,那么该输出可能会阻止 SFTP 或 SCP 正常工作。

    正如在萨尔瓦的回答中一样,您可以通过将 SSH 服务器设置为使用 internal-sftp 进行 SFTP 会话来避免这种情况。这可以避免为 SFTP 会话启动 shell。这对 SCP 或通过 ssh 运行的其他程序(如 git 或 rsync)没有帮助。

    解决此问题的其他方法是通过您的 shell 启动命令,找出产生输出的原因,并防止在非交互式 SSH 会话期间发生这种情况。一个提示是在运行产生输出的命令之前测试 TTY:

    if [ -t 1 ]; then
        # standard output is a TTY
        ...
    fi
    

    【讨论】:

      【解决方案3】:

      它可以通过使用internal-sftp 子系统来修复。 编辑/etc/ssh/sshd_config并替换

      子系统 sftp /usr/lib/openssh/sftp-server

      通过

      子系统 sftp internal-sftp

      然后你需要用这个命令重启sshd服务:

      /bin/systemctl restart sshd.service
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-05
        • 1970-01-01
        • 2017-01-16
        • 2020-07-19
        • 2018-12-12
        • 1970-01-01
        • 1970-01-01
        • 2017-11-23
        相关资源
        最近更新 更多