Linux SFTP错误“;“收到的消息太长”;

Linux SFTP错误“;“收到的消息太长”;,linux,sftp,Linux,Sftp,我最近尝试使用sftp访问我的linux机器,在那里我实现了一个我自己的简单shell。我将root以外的用户设置为默认使用我的shell(通过编辑/etc/passwd文件)。然后问题出现了,一旦我尝试通过sftp访问,我将收到一条消息,说“Received message too long:”,我搜索了解决方案,其中一个解决方案是将此用户的默认shell改回正常的bash shell。我试过这样做,但它成功了,问题是有没有一种方法可以让我仍然使用自己的shell并允许sftp通过?请回答我的

我最近尝试使用sftp访问我的linux机器,在那里我实现了一个我自己的简单shell。我将root以外的用户设置为默认使用我的shell(通过编辑/etc/passwd文件)。然后问题出现了,一旦我尝试通过sftp访问,我将收到一条消息,说“Received message too long:”,我搜索了解决方案,其中一个解决方案是将此用户的默认shell改回正常的bash shell。我试过这样做,但它成功了,问题是有没有一种方法可以让我仍然使用自己的shell并允许sftp通过?请回答我的更多详细信息,如我应该编辑哪个文件等。提前感谢:)

配置您的服务器以使用内部sftp服务器将以下指令添加到
/etc/ssh/sshd\u config

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

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

ssh user@remote 'echo hello'
如果这产生除“hello”之外的任何输出,那么该输出可能会阻止SFTP或SCP正常工作

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

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

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

很好,谢谢。我还必须添加一个
sudo服务sshd restart
,并重新启动我的sftp守护进程(
sudo服务vsftpd restart
)。