SFTP: Received message is too long

  1. 问题描述

最近在使用sftp过程中遇到的问题,使用sftp连接目标服务器的时候出现的报错信息,报错信息如下:

该问题通常是由于在目标服务器中~/.bashrc中存在输出信息,可以检查sftp时候使用的用户对应的位置是否存在输出信息。在网上搜索了不少相关资料现在整理一下。

  1. 原因分析

该错误是由远程系统(SFTP服务器)上的默认shell启动(或初始化)文件,如.bashrc、.bash_profile、/etc/profile或.shrc引起的,如果这些文件尝试将文本写入终端,就会引发错误。SSH会话具有由系统或者每个shell启动文件的程序传输信息,干扰了正常的SFTP或SCP协议。

我遇到的情况是有人在服务器端为了个性化输出一些内容,比如我想在服务器端每次用ssh登陆时看到“欢迎登陆”之类的消息,修改了~/.bashrc文件,导致客户端sftp连接失败。

  • 解决方法

在网上搜索了几种解决方案,整理如下:

  1. 将~/.bashrc中的输出语句删除或者注释;

该方法比较暴力,影响个性化输出,解决的不够完美。

  1. 修改/etc/ssh/sshd_config中的配置信息:

vim /etc/ssh/sshd_config

#将下面的字段
Subsystem sftp /usr/libexec/openssh/sftp-server
#修改为
Subsystem sftp internal-sftp

该方法可以解决问题,但是很多人会疑惑sftp-server和internal-sftp的区别,内容主要聚焦于解决问题,就不在此过多解释了,感兴趣的可以直接互联网搜下,相关的解释很多,就不贴这里了。

  1. 在~/.bashrc中最上方添加代码:

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

该脚本主要用于判断当前执行的是否是交互式shell,如果不是的话什么都不要做直接返回。

注:代码逻辑不唯一,只要实现该功能即可。

只有第三种信息符合我的需求,想在不修改~/.bashrc的输出内容的情况下解决。

希望文章对你们有帮助~

参考链接:

https://stackoverflow.com/questions/8250379/sftp-on-linux-server-gives-error-received-message-too-long
https://unix.stackexchange.com/questions/61580/sftp-gives-an-error-received-message-too-long-and-what-is-the-reason
https://www.ittsystems.com/troubleshooting-received-message-too-long/

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值