선택한 Mercurial 저장소로 푸시를 제한하려면 "ssh" 강제 명령 및 "hg-ssh"를 사용하십시오.

선택한 Mercurial 저장소로 푸시를 제한하려면 "ssh" 강제 명령 및 "hg-ssh"를 사용하십시오.

이 질문의 배경은hg-ssh스크립트. 뭔가를 아는 것은 도움이 되지만 중요하지는 않습니다수은. 스크립트는 공개 키 세트 적용 명령을 사용하므로 서버에 설정된 공개 키는 해당 개인 키의 소유자만 서버에서 허용된 저장소 세트에 푸시할 수 있도록 허용합니다. 이 강제 명령은 일반적으로 ~/.ssh/authorized_keys서버 파일의 공개 키 앞에 붙습니다. 이 허용된 컬렉션과 관련하여 위 링크의 스크립트 이전 문서에는 다음과 같이 나와 있습니다.

You can use pattern matching of your normal shell, e.g.:
command="cd repos && hg-ssh user/thomas/* projects/{mercurial,foo}"

아이디어는 이 패턴과 일치하는 서버의 저장소에만 푸시를 허용하는 것입니다. 저는 항상 hg-sshforce 명령을 사용합니다

command="cd /srv/hg && /usr/local/bin/hg-ssh * */* */*/* */*/*/*",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa [...]

/srv/hg쉘 와일드카드를 사용하여 모든 저장소를 일치시키십시오(특정 수의 경로 구성요소까지). 나중에 알고 보니 그랬다.아니요로 시작하는 구성요소에 대해 일치하는 경로를 포함합니다 .. 현재 작동하지 않는 예는 다음과 같습니다.MQ저장소 /srv/hg/faheem/bixfile/.hg/patches. 제 질문은 해당 모드를 선택할 수 있느냐는 것입니다.모두길? 나는 일반적으로 정규식보다 쉽게 ​​문제를 해결하는 쉘 와일드카드를 사용하는 것을 선호하지만, 와일드카드를 사용할 수 없는 경우 정규식을 사용하겠습니다.

답변1

재귀 일치의 경우 올바른 도구는 일반적으로 입니다 find. 현재 디렉터리와 해당 하위 디렉터리의 모든 파일을 특정 깊이까지만 재귀적으로 일치시키려면 를 지정 -maxdepth하지 마십시오.POSIX, 그러나 현재 모든 *BSD 및 GNU find(Linux, Cygwin) 및 Busybox(내장 Linux)에 존재하므로 해당 기능이 있는지 확인할 수 있습니다. -exec … {} +POSIX에 비교적 새로 추가된 것이지만 한동안 GNU와 FreeBSD/NetBSD/OSX에도 있었습니다.

cd /srv/hg && find . -type d -maxdepth 3 -exec /usr/local/bin/hg-ssh {} +

-type d(모든 유형의 파일과 일치시키기 위해 등을 사용하려고하더라도 디렉토리 만 일치시키려는 것 같아서 추가합니다 * */*.)

관련 정보