Skip to content

SSH를 통해 닉스 저장소 제공

SSH를 통해 원격 닉스 저장소에 필요로 하는 바이너리를 다운로드 받도록 자동 명령할 수 있습니다. 예를 들어, 파이어폭스 클로져에 필요한 어떤 저장소 경로든 부합하는 것이 avalon 서버에 있는지 확인해 가능하다면 자동으로 다운로드 받아 설치합니다:

$ nix-env -i firefox --substituters ssh://alice@avalon

이는 닉스가 평소에 사용하는 바이너리 캐시 대체자와 유사하게 작동하지만, 유일하게 다른 점은 HTTP 대신 SSH를 사용한다는 점입니다: 만약 저장소 경로 P가 필요하다면, 닉스는 우선 avalon의 저장소 경로에 가용한 것이 있는지 확인합니다. 없다면, 바이너리 캐시 대체자를 사용하고, 그것도 안되면 소스 코드로부터 빌드를 시작합니다.

주의

SSH 대체자는 현재 SSH 비밀번호를 상호 작용식으로 입력하는 것을 허용하지 않습니다. 따라서, ssh-add를 통해 ssh-agent로 개인 키를 복호화하여 로드한 후 사용해야만 합니다.

거기에 더해, 특정 저장소 경로의 클로져를 복사해 설치하지는 않고 프로파일에 추가할 수도 있습니다. 예,

You can also copy the closure of some store path, without installing it into your profile, e.g.

$ nix-store -r /nix/store/m85bxg…-firefox-34.0.5 --substituters
ssh://alice@avalon

이는 본질적으로 다음과 동일합니다.

$ nix-copy-closure --from alice@avalon
/nix/store/m85bxg…-firefox-34.0.5

SSH의 강제 명령 기능을 활용해 SSH 대체자에 접근할 제한된 사용자를 설정한 다음, 로컬 닉스 저장소에 읽기-전용 접근만 허가하고 다른 것은 못하도록 만들 수도 있습니다. 예를 들어, sshd_config에 사용자 nix-ssh를 제한 사용자로 설정하기 위해 다음을 적습니다:

Match User nix-ssh
  AllowAgentForwarding no
  AllowTcpForwarding no
  PermitTTY no
  PermitTunnel no
  X11Forwarding no
  ForceCommand nix-store --serve
Match All

닉스OS에서는 같은 기능을 configuration.nix에 다음과 같이 추가하여 달성할 수 있습니다:

nix.sshServe.enable = true;
nix.sshServe.keys = [ "ssh-dss AAAAB3NzaC1k... bob@example.org" ];

아랫 문장은 연결이 허가된 사용자들의 공개 키 목록을 적습니다.


Last update: November 4, 2021
Back to top