我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