使用WinSCP以Root身份登录Google Compute Engine虚拟机实例时,出现“接收到过大的SFTP数据包”的错误提示。

15

你好,我可以使用自己的用户名登录GCE VM,并使用WinSCP进行登录,但无法以root身份登录...这是Google默认设置,但可以更改。

更改方法如下:

步骤1:登录SSH并切换为Root用户

# sudo su root

步骤2:更改Root密码

#passwd root

第三步:配置SSHD允许root登录
#nano /etc/ssh/sshd_config
PermitRootLogin yes
PasswordAuthentication yes

#service sshd restart (I used ssh as I'm using ubuntu and sshd wouldn't work)

尝试通过WinSCP登录root,但我收到了“接收到过大的(1349281121B)SFTP数据包。最大支持数据包大小为1024000B。该错误通常是由启动脚本(如.profile)打印的消息引起的。该消息可能以“Plea”开头。无法初始化SFTP协议。主机是否运行了SFTP服务器?”有什么想法吗?

1
尝试登录新创建的AWS EC2实例时出现了错误。解决方案是使用admin用户名而不是rootPlea事实上是一条消息,要求以用户“admin”而不是用户“root”的身份登录。 - ᴍᴇʜᴏᴠ
10个回答

20

收到了过大的SFTP包。 最大支持的数据包大小为102400 B

原因: 当你的.bashrc文件向屏幕打印数据(例如archeyscreenfetch)时,就可能会出现此问题。每次初始化控制台shell时,.bashrc文件都会运行。

输入图像描述

解决方案: 将生成输出的任何脚本从.bashrc文件移动到.bash_profile中即可。只有在创建物理shell会话时才会运行.bash_profile


你是对的;请注意,您配置文件中的任何“echo”命令都可能导致问题。为了解决这个问题,请在您的.bashrc文件中注释掉任何类型的“echo”,然后重新连接会话。 - Naor Bar
我回退到SCP,为什么WinSCP不可以忽略那些输出,在.bashrc /etc/bashrc /etc/profile等文件中很难找到它们。 - Dee
非常感谢。我在我的.bashrc文件中添加了一个echo语句,这导致Transmit for Mac无法连接到我的Amazon Linux EC2实例。如果有人遇到和我一样的问题,请注意。(错误信息只是“无法连接”) - Tim

14

注意:如果你只是想复制文件,并不在意使用什么文件协议,那么可以将文件协议从SFTP切换到SCP,以避免这个问题。这可能值得一提。


谢谢,使用SCP是可以的,但我仍然收到错误信息,我的.bashrc /etc/bashrc...没有打印出任何东西。 - Dee

5
如果你使用Ubuntu Linux并尝试连接服务器时出现“请以Ubuntu用户身份登录”的提示,那么你应该作为ubuntu用户进行SFTP,而不是root用户。
请尝试此方法,希望对您有用!
谢谢!

从CentOS 6切换到7时遇到了同样的问题,以前可以使用root,但现在不行了。尝试使用root进行SSH响应:“请使用用户“centos”而不是用户“root”登录。” 在WinSCP中更改用户解决了这个问题。 - Dan Dar3

2

嗯,我在WinSCP的高级设置下添加了以下内容:“protocol options”:sudo /usr/lib/openssh/sftp-servers。

现在我可以使用自己的用户名登录并移动文件。虽然不太确定这是如何工作的,但我认为它在登录时以某种方式将您更改为root用户?

更多信息:https://winscp.net/eng/docs/faq_su


这也适用于Ubuntu 18.04,只需删除最后的“s”:sudo /usr/lib/openssh/sftp-server而不是“..servers”。 - Nenad Bulatović

1
禁用通过SSH登录的任何用户的Ubuntu欢迎消息。
sudo chmod -x /etc/update-motd.d/*

其次,您将面临要通过在目录/etc/sudoers.d/中创建一个名为somefile(名称中不包含~和.)的文件来解决的Error Code 1问题,其中包含以下一行内容:
user1 ALL=NOPASSWD: /usr/bin/su -c /usr/lib/openssh/sftp-server

授予用户1以超级用户身份通过SFTP连接到服务器的权限,无需提示输入sudo密码。 当然,在此之后不要忘记运行sudo systemctl restart sshd
在WinSCP的高级连接设置中,您可以在SFTP选项卡中指定:
sudo su -c /usr/lib/openssh/sftp-server

所以您将能够写入受保护的文件/文件夹。


0
确保您可以使用用户ie登录以检查此运行。
cat /ect/passwd

用户不应该有:/sbin/nologin

0

请参阅WinSCP文章收到过大(...B)SFTP数据包。最大支持数据包大小为102400 B

如果...(来自主题[错误消息])是一个非常大的数字,那么问题通常是由某个配置文件/登录脚本中打印的消息引起的。它违反了SFTP协议。其中一些脚本即使对于非交互式(无TTY)会话也会被执行,因此它们无法打印任何内容(也无法要求用户输入任何内容)。


我并没有尝试过这个方法,因为在WinSCP的高级设置中添加“sudo /usr/lib/openssh/sftp-servers”即可解决。谢谢。 - Eric

0

关于@ThatOneCoder的答案,原因是.bashrc输出过多:例如在Ubuntu中,还有系统范围的/etc/bash.bashrc可能会“太啰嗦”,导致接收到过大的SFTP数据包错误。

这是一个“系统范围的.bashrc”,如果您想要为所有登录执行代码,那么这是一个放置代码的位置。如果您删除了~/.bashrc但仍然遇到错误,请检查/etc/bash.bashrc的内容。


-1

这是因为您没有给用户授予 shell 访问权限。


你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

-2

我在尝试通过WinSCP登录我的Ubuntu 16.04 EC2服务器时遇到了相同的问题,尝试使用“root”用户。我花了很多时间来解决它,但最终一个简单的解决方法适用于我。

我使用用户名“ubuntu”通过PuTTY ssh进入实例。之后我输入了

sudo -i

通过这个操作,用户已经被更改为root。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接