Unison을 사용하여 데스크톱 컴퓨터와 클라우드의 컨테이너 간에 디렉터리를 동기화하고 싶습니다. 저는 이런 종류의 작업을 위해 Unison을 사용하고 있지만, 제가 보는 문제는 컨테이너를 시작할 때마다 다른 호스트 이름과 IP 번호를 가질 수 있고 sshd가 다른 포트 번호에서 실행된다는 것입니다.
이를 거의 투명하게 만들기 위해 컨테이너를 시작할 때마다 ~/.ssh/config 파일을 다음과 같이 편집합니다.
Host pod
User root
Hostname 184.26.5.182
Port 10666
이에 따라 IP 번호와 포트 번호를 교체했습니다.
ssh pod
이 작업을 수행한 후 등을 사용하여 컨테이너에 로그인 할 수 있습니다 . 호스트 별칭 "pod"가 내장되어 있어도 문제 없이 rsync 콘텐츠가 포함된 스크립트를 실행할 수 있습니다. (삭제와 함께 rsync를 양방향으로 만드는 방법을 알고 있다면 그것을 사용하겠지만 불가능할 것이라고 확신합니다.)
내 Unison 구성 파일은 다음과 같습니다.
root = /Users/me/path/to/dir
root = ssh://pod//path/to/dir
ignore = Path subdir1
ignore = Path subdir2
불행하게도 이것은 컨테이너를 시작할 때마다 다른 포트 번호(IP 번호는 일반적으로 변경되지 않음)를 얻고 Unison은 이것이 새로운 동기화라고 생각하기 때문에 잘 작동하지 않습니다. 이것은 내가 원하는 것이 전혀 아닙니다.
원격 컨테이너가 다른 시스템으로 변경된 것으로 보인다는 사실을 무시하고 호스트 ID에 의존하는 내 "포드" 호스트 별칭을 신뢰하도록 Unison에게 지시하는 방법이 있습니까?
답변1
내 질문에 대한 답을 알아냈지만, 좀 마음이 아프네요.
먼저 로컬 파일의 항목을 ~/.ssh/config
다음과 같이 변경했습니다.
Host pod
User root
SetEnv UNISONLOCALHOSTNAME=pod
Hostname 184.26.5.182
Port 10666
물론 쉽습니다. 그러나 들어오는 클라이언트가 이 명령을 실행할 sshd
수 있도록 컨테이너에 구성 하지 않으면 작동하지 않습니다 . 예ssh
SetEnv
sshd
아니요기본적으로 이를 허용하도록 구성되어 있습니다. 따라서 컨테이너가 시작될 때마다 컨테이너에서 호출할 수 있는 스크립트를 작성해야 합니다. 이 스크립트는 데스크톱 컴퓨터에서 일관되게 실행하기 전에 다음을 수행합니다.
- 컨테이너
AcceptEnv UNISONLOCALHOSTNAME
의/etc/ssh/sshd_config
. - 다음을 수행하여 컨테이너의 sshd에 구성 파일을 다시 로드하도록 지시합니다.
kill -HUP `cat /var/run/sshd.pid`
또는:
더 간단하게는 /root/.bashrc
컨테이너에서 스크립트를 수정할 수 있습니다.
export UNISONLOCALHOSTNAME=pod
장소맨 위의 /root/.bashrc
. (쉘의 맨 아래에 넣으면 작동하지 않습니다. 쉘이 대화형이 아닌 경우 그 안의 코드가 일찍 종료되기 .bashrc
때문입니다 .).bashrc
.bashrc
안타깝게도 컨테이너가 시작될 때마다 루트 파일 시스템이 다시 초기화되기 때문에 한 번만 편집하고 끝낼 수는 없습니다 . 따라서 이 재작성은 /root/.bashrc
클라우드 서비스에서 제공하는 영구 파일 시스템에 보관하는 스크립트를 통해 수행되어야 합니다. 또는 내가 사용 하고 변경하는 .bashrc
데스크탑의 로컬 스크립트를 통해 컨테이너를 편집할 수 있습니다.ssh
scp