.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대화형 모드가 아닌 이상 반환되어야 한다고 생각합니다. 그래서 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

관련 정보