우리는 여러 호스트에 연결하는 데 사용되는 요새 서버가 있으며 .ssh / config는 수천 줄 이상으로 커졌습니다 (수백 개의 호스트가 연결되어 있습니다). 이것은 다루기 어려워지기 시작했으며 .ssh / config 파일을 여러 파일로 나눌 수있는 방법이 있는지 알고 싶습니다. 이상적으로는 다른 파일을 다음과 같이 .ssh / config 파일로 취급하도록 지정합니다.
~/.ssh/config
~/.ssh/config_1
~/.ssh/config_2
~/.ssh/config_3
...
ssh / config에 대한 설명서를 읽었으며 이것이 가능하다는 것을 알지 못합니다. 그러나 다른 사람이 비슷한 문제를 겪고 해결책을 찾았습니다.
답변
~/.ssh/config
설정 파일은 파일 권한에 대한 SSH 수표와 관련된 다른 파일을 포함하기위한 지침이 없습니다.
이에 대한 제안에는 시스템에서 또는 저장소의 체크인 후크를 통해 여러 변경 사항을 함께 제공하는 스크립트가 포함될 수 있습니다. Puppet 또는 Augeas와 같은 도구를 살펴볼 수도 있습니다.
그러나 접근하면 개별 파일을 파일 외부에서 단일 파일로 연결해야합니다.
$ cat ~/.ssh/config_* >> ~/.ssh/config
참고 : 덮어 쓰기 : >
vs 추가 :>>
2017 년 12 월 업데이트 :
7.3p1부터 Include 옵션이 있습니다. 구성 파일을 포함시킬 수 있습니다.
Include
Include the specified configuration file(s). Mul‐
tiple pathnames may be specified and each pathname
may contain glob(3) wildcards and, for user config‐
urations, shell-like “~” references to user home
directories. Files without absolute paths are
assumed to be in ~/.ssh if included in a user con‐
figuration file or /etc/ssh if included from the
system configuration file. Include directive may
appear inside a Match or Host block to perform con‐
ditional inclusion.
답변
다음과 같이 ssh 옵션에서 사용할 현재 구성 파일을 지정할 수 있습니다.
ssh -F /path/to/configfile
그것이 유일한 방법 인 것 같습니다.
또한 하나의 구성을 다른 구성에 포함시킬 수 없습니다.
답변
ssh 7.3 (2016 년 8 월 1 일 릴리스)부터 Include
지시문을 사용할 수 있습니다.
포함 : 지정된 구성 파일을 포함시킵니다. 여러 경로 이름을 지정할 수 있으며 각 경로 이름에는 glob 와일드 카드 및 사용자 홈 디렉토리에 대한 쉘과 유사한 “~”참조가 포함될 수 있습니다. 절대 경로가없는 파일은에 있다고 가정합니다
~/.ssh
.
Include
지시문은 내부 나타나는Match
또는Host
조건을 포함하는 블록을 수행.
(여기서 또한 패치가 포함되어 해결 된 버그 리포트에 대한 링크는 다음과 같습니다 https://bugzilla.mindrot.org/show_bug.cgi?id=1585#c24 )
답변
개인적으로 ssh 구성을 컴파일하기 위해 해당 명령을 사용합니다.
alias compile-ssh-config='echo -n > ~/.ssh/config && cat ~/.ssh/*.config > ~/.ssh/config'
alias ssh='compile-ssh-config && ssh'
# (This will get used by other programs depending on the ~/.ssh/config)
# (If you need you can run the compile-ssh-config command via cron etc.)
또는:
alias compile-ssh-config='echo -n > ~/.ssh/config-compilation && cat ~/.ssh/*.config > ~/.ssh/config-compilation'
alias ssh='compile-ssh-config && ssh -F ~/.ssh/config-compilation'
# (This is saver and won't over write an existing ~/.ssh/config file)
때문에:
alias ssh='ssh -F <(cat .ssh/*.config)'
나를 위해 작동하지 않습니다.
ssh: Can't open user config file /dev/fd/63: Bad file descriptor
이것이 도움이되기를 바랍니다.
답변
또한 cat config_* > config
전체 구성을 생성하는 데 사용 합니다. 그러나 아직 배치되지 않은 경우 꼭두각시 / cfengine 등을 사용하지 않습니다 (BTW : 구성 관리 시스템을 사용하지 않는 이유는 무엇입니까 ???).
패키지 (deb, rpm)를 생성하여 로컬 리포지토리에 넣습니다. 그리고 postinst 스크립트에서 고양이는 설정을 생성합니다. 아마도 당신은 또한 로컬 폴더를 포함 할 것입니다 … 장점은 ssh / config 업데이트가 cron-apt & Co run 동안 매일베이스에서 활성화된다는 것입니다.
답변
다음에서 Makefile을 사용할 수 있습니다 ~/.ssh
.
config: config.in config.app.in
> $@
(for f in $+; do cat $$f; echo; done) | sed '$$ d' >> $@
config.app.in:
(echo "# Generated with foobar.sh."; \
foobar.sh) > $@
.PHONY: config.app.in
그런 다음 기존 config
으로 이동 config.in
하고를 실행 make
하여 생성하십시오 config
.
답변
config.d
구성 구성 을위한 디렉토리 개념을 가지고 놀고 있습니다. 위의 옵션 더미에 추가하려면 다음과 같이하십시오.
디렉토리 구조는
~/.ssh/config.d
├── system_1
├── system_2
├── system_3
├── personal_boxen
├── git_things
├── random
└── rubbish
~ / .ssh / config를 빌드하고 쉘의 run-config에있는 기능은 다음과 같습니다.
sshMakeConfig() {
echo '# AUTOGENERATED by sshMakeConfig()' > ~/.ssh/config
for i in ~/.ssh/config.d/*
do echo "#${i}" | tee -a ~/.ssh/config
cat ${i} >> ~/.ssh/config
done
}
sshMakeConfig
각 셸 세션에서 새로운 구성을 유지하려면 선택적으로 run-config의 맨 아래에 추가 하십시오.
~ / .ssh / config를 다시 컴파일해야 할 때마다 sshMakeConfig
어떤 형식으로 (직접 실행 구성 소싱 또는 새 셸 시작) 실행합니다.