如何在安全 FTP 登录期间不运行 /etc/profile.d/custom.sh

如何在安全 FTP 登录期间不运行 /etc/profile.d/custom.sh

当我尝试将 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 或本地控制台登录,则输出当天的消息(系统统计信息)。

谢谢!Brad

更新-这里有支持此问题的文档: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 应被检测为非交互式还是交互式?如果是非交互式,为什么当我尝试通过 Secure FTP 登录时上面的代码不存在脚本?

答案1

也许是检查 fd‘0’的标准方法?

if [ -t 0 ]; then
# do stuff
fi

答案2

/etc/profile.d事实上,仅通过 SSH/控制台进行交互式登录才需要使用动态 MOTD,这将产生此类问题。

虽然解决方法是Danila Lander 的回答可能会有效,我建议做正确的事情并使用适当的解决方案。

请参见这个问题的答案有关如何在 Ubuntu 和 Centos 7 服务器上正确执行此操作的信息。

相关内容