由于 .bashrc 中设置的登录问候语,来自远程主机的 scp 失败

由于 .bashrc 中设置的登录问候语,来自远程主机的 scp 失败

scp来自远程主机(实际上是本地运行的虚拟机,但这不重要)的简单文件失败,没有显示任何错误消息,但显然没有复制所需的文件:

scp myuser@myhost:~/.bashrc ~/.bashrc.ubuntu

它唯一显示的是

================================================================================

我认为这很奇怪,因为这是远程登录问候语中显示的第一行,如下所示:

================================================================================
Welcome to <Ubuntu 12.04.2 LTS>
You are <myuser> logged into <hostname> (my_ipaddress)
Today is <Wed Aug 28 16:48:49 EDT 2013>
================================================================================

.bashrc以下是遥控器上定义该问候语的内容:

1 if [ -f ~/.bash_aliases ]; then
2     . ~/.bash_aliases
3 fi
4 
5 
6 export PS1='\w@\t>'
7 
8 set -o vi
9 
10 printf %80s |tr " " "="
11 echo
12 
13 echo "Welcome to <"`lsb_release -d | sed 's/Description\:\s*//'`">"
14 
15 export IPADDR=`hostname -I`
16 
17 echo "You are <"$LOGNAME"> logged into <"$HOSTNAME"> ("$IPADDR")"
18 
19 echo "Today is <"`date`">"
20 
21 
22 printf %80s |tr " " "="
23 echo

一旦我删除了远程 .bashrc 上 9 下的所有内容,scp 就成功了。

谁能解释一下这个奇特的现象吗?本地主机是Mac OS Mountain Lion,远程(VM)是Ubuntu 12.04

答案1

帮助者这个线程,我认为问候语中的特殊字符是问题所在,.bashrc除非我们处于交互模式,否则应该返回。所以我将以下内容添加到远程 .bashrc 的开头:

# If not running interactively, don't do anything
if [[ $- != *i* ]]; then return; fi

这解决了问题,我能够使用scp

答案2

是的,如果您的远程 shell 在 ssh 时很乱,scp 将失败,因为它依赖于清晰的 ssh 连接。这是更详细的解释。

https://blogs.oracle.com/janp/entry/how_the_scp_protocol_works

相关内容