我们的团队决定为所有房东添加欢迎横幅。团队成员没有添加消息 in,而是/etc/motd
添加了消息echo
in ~/.cshrc
。
这正在破坏scp
主机之间的关系。有人可以解释这是如何打破的吗scp
?cshrc
即使你这样做时也已加载scp
?其中的一些回显消息将如何破坏它?
我不知道内部运作scp
。
我们添加的消息~/.cshrc
:
echo "##############################################################################"
echo " Alert! Aler! Alert! Alert! Alert! Alert!"
echo "This is a restricted box, any actions performed here will be reported to [email protected]"
echo "##############################################################################"
答案1
在传输之上运行的命令ssh
在启动服务器之前不会期望大量输出。这将影响许多公用事业。
解决方案是让您的管理团队仅在以下情况下打印消息:标准输出已连接至终端。
if ( $?prompt ) then
echo "Secure machine message..."
echo "More warnings"
echo "Etc."
endif
更好的是,您根本不会将其放入.cshrc
,而是将消息内容本身放入 中/etc/issue.net
,并显示前登录。不过,这可能需要启用/etc/ssh/sshd_config
,使用如下行:
Banner /etc/issue.net
答案2
您无法在非交互式会话中打印任何内容。这会破坏任何使用严格协议(例如 SFTP 或 SCP)的客户端。
使用/etc/motd
(仅用于交互式会话)。
或者使用sshd_config
指令Banner
。
TERM
或者在打印任何内容之前测试交互式会话(例如,通过测试或变量的存在prompt
)。
有关背景信息,请参阅我对服务器故障问题的回答每个用户的 SSH MOTD。
答案3
我相信您必须将这些行放在 .cshrc 文件中的任何内容之上,因为否则,它将不允许您执行 sftp 或 ftp 或其他任何操作,因为它是一个交互式 shell:
这些错误通常是由 shell 运行控制文件(.cshrc、.profile、.bashrc 等)中向终端生成输出的命令引起的。此输出会干扰 SSH 守护程序和 sftp 服务器子系统之间的通信。此类命令的示例可能是 date 或 echo。如果您使用 mail 命令检查邮件,也可能会导致错误。要解决此问题,您应该将任何将产生输出的命令放在条件语句中,该条件语句仅在 shell 是交互式的情况下才执行。 (所有修复都需要位于相关 shell 的控制文件的顶部。
布莱恩·贝克
答案4
在里面~/.cshrc
。我相信这会让修复变得容易。更改代码~/.cshrc
以读取
echo 1>&2 "##############################################################################"
echo 1>&2 " Alert! Aler! Alert! Alert! Alert! Alert!"
echo 1>&2 "This is a restricted box, any actions performed here will be reported to [email protected]"
echo 1>&2 "##############################################################################"