终于解决了一个困扰我几次的问题。在此经验分享一下,希望能帮到遇到同样问题的朋友。
问题的起因是想使用Notepad++连接SFTP服务器,无法成功建立连接,总是停在通过验证后。Notepad++中的NppFTP插件一直显示”NppFTP - connecting“,无法取消,也不能进行其他操作。
[NppFTP] Everything initialized
Connecting
[SFTP] Host key accepted
[SFTP] Successfully authenticated
换WinSCP连接,也发现无法建立SFTP连接,但好在出现一个错误对话框, 揭示了错误原因:Received too large (778199411 B) SFTP packet. Max supported packaet size is 1024000 B.
The error is typically caused by message printed from startup script (like .profile). The message may start with ".bash".
也可在另外一台Linux上直接用sftp命令验证,会得到以下错误:
$ sftp yourlogin@yourhost
...
Received message too long 778199411
解码“778199411”,得到二进制表示的4个字节 - “2E626173”,对照ASCII码表,正是".bas"这四个字符。检查SFTP服务器上home目录,发现在 .bashrc 中有一条打印命令:
echo ".bashrc is executed ..."
这条命令是前些时候,为了搞清".profile" 和".bashrc"的执行顺序加上去的调试语句,终于找到罪魁祸首了。把这行删去,问题迎刃而解了。
由此问题的解决还可看出:在SFTP的连接过程中,通过验证后,用户的shell所对应的启动脚本会执行。在此例中,用户的shell是"/bin/bash",启动脚本是“./bashrc”,没有“./bash_profile”。