当我尝试将 FTP(使用 WinSCP)保护到我的 CentOS 6.4 框时,我收到一条消息提示:
Received too large (168438314 B) SFTP packet. Max supported packet size is 1024000 B.
This error is typically caused by message printed from startup script (like profile). The message may start with ""\n\n**""
Cannot initialize SFTP protocol. Is the host running an SFTP server
这似乎是由我的 /etc/profile.d/custom.sh 脚本引起的,该脚本在登录期间运行。它设置为输出欢迎消息以及系统摘要(CPU/内存/磁盘使用情况)。
我真的需要在登录本地控制台或通过 SSH 登录时运行 custom.sh 脚本。但是我不希望它在登录安全 FTP (SFTP) 时运行。
有什么方法可以将其配置为在通过安全 FTP 登录时不运行?
或者,如果我无法阻止它运行,是否有一种方法可以检测到它在安全的 FTP 登录期间正在运行并且不输出任何内容。所以在伪代码中是这样的:
如果通过安全 FTP 登录,则不输出任何内容。如果通过 SSH 或本地控制台登录,则输出当天的消息(系统统计信息)。
谢谢!布拉德
更新 - 这里有支持此问题的文档:http ://winscp.net/eng/docs/requirements#remote_environment
建议是检测会话是否是交互式的。我尝试通过将以下内容添加到我的 custom.sh 的顶部来做到这一点,但它仍然无法正常工作:
if [ -z $PS1 ]; then
### if [ -v PS1 ] # On Bash 4.2+ ...
# non-interactive
return
fi
然后我的脚本的其余部分运行输出 MOTD。
SecureFTP 应该被检测为非交互式还是交互式?如果它是非交互式的,为什么当我尝试通过安全 FTP 登录时上面的代码不存在脚本?
也许是检查 fd '0' 的标准方法?
使用
/etc/profile.d
仅用于通过 SSH/控制台进行交互式登录所需的事实上的动态 MOTD 将产生此类问题。虽然Danila Lander 的回答中的解决方法可能有效,但我建议做正确的事情并为此使用适当的解决方案。
请参阅此问题的答案,了解有关如何在 Ubuntu 和 Centos 7 服务器上以正确方式执行此操作的信息。