Unison을 사용하여 데스크탑 컴퓨터를 클라우드의 컨테이너와 동기화

Unison을 사용하여 데스크탑 컴퓨터를 클라우드의 컨테이너와 동기화

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수 있도록 컨테이너에 구성 하지 않으면 작동하지 않습니다 . 예sshSetEnvsshd아니요기본적으로 이를 허용하도록 구성되어 있습니다. 따라서 컨테이너가 시작될 때마다 컨테이너에서 호출할 수 있는 스크립트를 작성해야 합니다. 이 스크립트는 데스크톱 컴퓨터에서 일관되게 실행하기 전에 다음을 수행합니다.

  1. 컨테이너 AcceptEnv UNISONLOCALHOSTNAME/etc/ssh/sshd_config.
  2. 다음을 수행하여 컨테이너의 sshd에 구성 파일을 다시 로드하도록 지시합니다.
kill -HUP `cat /var/run/sshd.pid`

또는:

더 간단하게는 /root/.bashrc컨테이너에서 스크립트를 수정할 수 있습니다.

export UNISONLOCALHOSTNAME=pod

장소맨 위/root/.bashrc. (쉘의 맨 아래에 넣으면 작동하지 않습니다. 쉘이 대화형이 아닌 경우 그 안의 코드가 일찍 종료되기 .bashrc때문입니다 .).bashrc

.bashrc안타깝게도 컨테이너가 시작될 때마다 루트 파일 시스템이 다시 초기화되기 때문에 한 번만 편집하고 끝낼 수는 없습니다 . 따라서 이 재작성은 /root/.bashrc클라우드 서비스에서 제공하는 영구 파일 시스템에 보관하는 스크립트를 통해 수행되어야 합니다. 또는 내가 사용 하고 변경하는 .bashrc데스크탑의 로컬 스크립트를 통해 컨테이너를 편집할 수 있습니다.sshscp

관련 정보