.bashrc に設定されたログイングリーティングにより、リモートホストの scp が失敗します。

.bashrc に設定されたログイングリーティングにより、リモートホストの scp が失敗します。

scpリモートホスト(実際にはローカルで実行されている仮想マシンですが重要ではありません)の単純なファイルは、エラーメッセージなしで失敗しますが、必要なファイルはコピーされていないようです。

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

見せるのが正しい

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

私の考えでは、これはTelnetの挨拶に表示される最初の行なので、奇妙だと思います。

================================================================================
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ない限り返す必要があると思います。だから私はRemote.bashrcの冒頭に以下を追加しました。

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

これにより問題が解決し、使用できました。scp

答え2

はい、リモートシェルがsshと混同する場合、scpは明確なssh接続に依存するため失敗します。詳細な説明は次のとおりです。

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

関連情報