如何在安全 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 登錄或當天的本地控制台輸出消息(系統統計資訊),則不輸出任何內容。
謝謝!布拉德
更新 - 這裡有支持這個問題的文件: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’ 的標準方法?
if [ -t 0 ]; then # do stuff fi
使用
/etc/profile.d
僅通過 SSH/控制台進行互動式登錄所需的事實上的動態 MOTD 將產生此類問題。雖然Danila Lander 的答案中的解決方法可能有效,但我建議做正確的事情並為此使用適當的解決方案。
有關如何在 Ubuntu 和 Centos 7 伺服器上以正確方式執行此操作的資訊,請參閱此問題的答案。