이 질문의 배경은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-ssh
force 명령을 사용합니다
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
(모든 유형의 파일과 일치시키기 위해 등을 사용하려고하더라도 디렉토리 만 일치시키려는 것 같아서 추가합니다 * */*
.)