SSH를 사용하여 대상 서버에 연결할 때 rsync를 사용하여 파일을 대상 서버에 복사합니다. 이를 위해 SSH 구성 파일에 다음이 있습니다.
ControlMaster auto
ControlPath ~/.ssh/%r@%h:%p
...
...
host dns
LocalCommand rsync --update -a -e "ssh -o PermitLocalCommand=no" ~/.cfg/ dns:.cfg/ &
...
...
ControlMaster 비트는 SSH를 통해 서버에 한 번 연결한 후 후속 SSH 연결에서 비밀번호를 묻지 않음을 의미합니다. 따라서 rsync는 비밀번호를 묻지 않고 실행됩니다.
이상하게도 구성 파일의 LocalCommand 줄 끝에 &가 없으면 작동하지 않습니다. 이것이 왜 필요한가요? &가 없으면 비밀번호를 입력한 후 로그인이 중단되고 CTRL/C를 누르면 CTRL/C에 의해 중단되어 연결이 실패하기 때문에 rsync 오류가 발생합니다. rsync 복사는 1초도 안 걸리고 중단됩니다.아니요rsync에는 시간이 오래 걸리기 때문입니다.
이 작업을 수행하는 방법을 찾는 데 오랜 시간이 걸렸습니다. 처음에는 작동하지 않았고 제가 말한 대로 중단되었습니다. 그런 다음 rsync 명령을 스크립트에 넣고 호출했지만 여전히 중단됩니다. 스크립트에서 터미널을 시작하고 rsync를 실행하면 제대로 작동하는 것으로 나타났습니다. 그런 다음 한 걸음 물러서서 rsync 이후에 &를 스크립트에 넣었더니 효과가 있었고 위와 같은 결과가 나왔습니다.
큰 문제는 아니며 작동 방식에 만족하지만 알고 싶습니다.왜필요& .
이것은 모두 Linux에서 수행되며 xubuntu/ubuntu는 양쪽 끝에서 실행됩니다.
답변1
대답할 수도 있다이 블로그 게시물:
마지막으로, ControlMaster에는 처음 접했을 때 상당히 혼란스러울 수 있는 몇 가지 성가신 점이 있습니다. 모든 SSH 세션은 첫 번째 SSH 세션에서 시작된 단일 TCP 연결을 통해 다중화되므로 첫 번째 세션은 다른 모든 세션이 완료될 때까지 활성 상태를 유지해야 합니다. 이 문제는 마스터 서버 역할을 하는 원격 세션에서 로그아웃할 때 명백한 "중지"로 나타나며 SSH는 로컬 프롬프트를 다시 시작하는 대신 그대로 유지됩니다. Ctrl-C를 누르거나 이 세션을 종료하면 이 서버에 설정한 다른 모든 세션이 손실되므로 이 작업을 수행하지 마십시오. 대신, 다른 모든 세션에서 로그아웃하면 마스터 서버가 로컬 프롬프트로 돌아갑니다.
SSH 옵션을 나열하기 위해 -S none을 추가하여 비슷한 문제를 해결했습니다.
LocalCommand rsync --update -a -e "ssh -o PermitLocalCommand=no -S none" ~/.cfg/ dns:.cfg/