Q) rsync 로 파일을 동기화를 하려고 할때 ssh 프로토콜을 사용하였을때 다음과 같은 에러가 나는 경우가 있다.
[root@TOM src]# rsync -avzP -e ssh root@xxx.xxxxxx.xxx:/home ./
root@xxx.xxx.xxx.xxx's password:protocol version mismatch -- is your shell clean?
(see the rsync man page for an explanation)
rsync error: protocol incompatibility (code 2) at compat.c(64) [receiver=2.6.8]
A) 먼저, 구글 검색 결과를 먼저 보자.
is your shell clean The "is your shell clean" message and the "protocol mismatch" message are usually caused by having some sort of program in your .cshrc, .profile, .bashrc or equivalent file that writes a message every time you connect using a remote-shell program (such as ssh or rsh). Data written in this way corrupts the rsync data stream. rsync detects this at startup and produces those error messages. However, if you are using rsync-daemon syntax (host::path or rsync://) without using a remote-shell program (no --rsh or -e option), there is not remote-shell program involved, and the problem is probably caused by an error on the daemon side (so check the daemon logs). A good way to test if your remote-shell connection is clean is to try something like this (use ssh or rsh, as appropriate): That should create a file called test.dat with nothing in it. If test.dat is not of zero length then your shell is not clean. Look at the contents of test.dat to see what was sent. Look at all the startup files on remotesystem to try and find the problem. |
간단하게 말하면......
ssh 로긴시에 배너나 특정 프로그램의 출력 등으로 인해 커맨드가 떨어지기 전에 다른 문구가 나오면 not clean 으로 인식한다는 이야기다. !
shell clean 여부를 테스트 하기 위해서는 다음의 커맨드를 사용하면 된다.
[root@TOM src]# ssh xxx.xxx.xxx.xxx /bin/true > test.dat
위의 커맨드를 사용하고 난 후
[root@TOM src]# ls -al test.dat
로 파일을 보았을 때 파일 사이즈가 0 이면 clean 이고 0 이 아니면 not clean 이다 !
~/.profile ~/.bashrc ~/.cshrc 나 배너 파일등을 수정하여 위의 테스트에서 파일 사이즈가 0 이 나오도록 수정해 주면 정상적으로 동기화가 가능하다.