我正在 PyCharm 中设置远程 SSH 解释器,但是当我尝试在远程计算机上选择解释器的位置时,出现以下错误:
Indicated packet length 1952805748 too large
我该如何解决这个问题?
我收到此错误是因为我的
.bashrc
文件打印到标准输出。当 PyCharm 通过 SFTP 连接到远程解释器的机器时,会获取 .bashrc
。它必须保持安静,否则会干扰 SFTP 协议。
解决方案是在不交互运行时提前退出
.bashrc
,方法是将此行放在顶部:
# If not running interactively, return early
[[ $- == *i* ]] || return
进一步阅读:
经过一番检查,我找到了这个问题的最终解决方案。
其实不是
pycharm
或intellij
的问题。
sync
文件到远程服务器的底层工作原理是使用sftp
上传文件和从远程服务器下载文件。
也许您已经注意到它在使用
root
用户同步时有效。
对于不同的人,他们使用不同的
sftp
实用程序,例如 putty
、Linux client
、Windows cmd
、Power shell
、xshell
等等。
通过在
sftp root@host
中使用命令 sftp user@host
或 xshell
(其中用户是您登录的用户)。
xshell
将要求您通过对话框输入密码。
这两个命令都可以工作。
但是当您通过相同的命令使用
windows cmd
时,这里的消息会跳出。
Received message too long 1399157792
Ensure the remote shell produces no output for non-interactive sessions.
您会看到,
pycharm
只需转发此信息即可。
这里有一个关于长消息的相关问题,sftp 给出错误:“收到的消息太长”,是什么原因?
因此,我们需要将
sftp server
配置更改为 non-interactive
模式。
通过编辑
/etc/ssh/sshd_config
,需要你有root permission
或询问服务器管理员
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
并重启
sshd
服务,通过 systemctl restart sshd
我也遇到了类似的问题。每次登录时,我都会 pip 更新集群中的一堆软件。因此,如果 pycharm 每次推送时都在集群中运行 bashrc,并且由于某种原因它处理其输出,那么这就是一个问题。我删除了远程/集群中 bashrc 中打印的所有行。
注意不要添加 '[[ $- == i ]] ||返回'到您的 .bashrc 除非它是您的本地计算机。
与此处描述的类似,scp 抱怨 .bashrc 的输出(它在登录时给出问候语)。有趣的是,FreeBSD 或 OpenBSD SSH 从来没有抱怨过同样的事情。但是Ubuntu...
嗯,我记得过去某些版本的 SSH 也有类似的问题,所以我添加了 '[[ $- == i ]] || return' 到我的 .bashrc,正如上面的 Killan Obermeier 所建议的那样。我做到了,下次无法登录,本地或远程都无法登录。收到正确的密码后,提示将重置回登录哈哈。幸好这不是远程机器。