W przypadku, gdy ma to znaczenie:
- System operacyjny: Ubuntu 10.04
- SSH: OpenSSH_5.3p1 Debian-3ubuntu5
Chciałbym, aby jeden plik konfiguracyjny SSH zawierał inny. Przypadkiem użycia byłoby zdefiniowanie, co chcę w domyślnym .ssh/config
pliku, a następnie wstępne umieszczenie kilku dodatkowych rzeczy w osobnym pliku (np ~/.ssh/foo.config
.). Chcę jednak, aby drugi plik zawierał pierwszy, więc nie muszę duplikować wszystkiego w pierwszym. Czy to wykonalne? Dzięki!
Odpowiedzi:
Od wersji 7.3p1 i wyższej istnieje
Include
słowo kluczowe, które umożliwia dołączanie plików konfiguracyjnych.Na przykład możesz mieć
~/.ssh/config
:oraz w
~/.ssh/config.d/home
:Z komentarzy użyj poniższych, aby dołączyć wszystkie pliki do
config.d
katalogu:źródło
Include config.d/*
aby uwzględnić wszystkie wpisy wconfig.d
.Host
wpisów.Nie, o ile mi wiadomo, nie jest to możliwe.
Oto linki do odpowiednich otwartych żądań funkcji / zgłoszeń błędów:
https://bugzilla.mindrot.org/show_bug.cgi?id=1585
https://bugs.launchpad.net/ubuntu/+source/openssh/+bug/739495
źródło
Slightly modified patch applied, this will be in openssh-7.3
Jeśli chcesz uruchomić klienta ssh, możesz to zrobić w bash:
wtedy normalnie używasz ssh i oba pliki będą czytane w tej kolejności.
W przypadku demona serwera
sshd
możesz zrobić to samo, po prostu użyj-f
zamiast-F
i zapisz to w miejscu, w którym uruchamiasz demona bezpośrednio. nie potrzebujesz aliasu.Drugą możliwością według strony podręcznika jest wprowadzenie konfiguracji całego systemu
/etc/ssh/ssh_config
i jednej użytkownika~/.ssh/config
.Aktualizacja Wygląda na to, że jest jakiś problem z niektórymi wersjami bash i sposobem tworzenia urządzeń. (patrz http://bugs.alpinelinux.org/issues/1465 )
To obejście (choć moim zdaniem brzydkie):
więc jeśli chcesz, możesz utworzyć z niego funkcję (lub skrypt):
źródło
~/.ssh/config
, 3./etc/ssh/ssh_config
, nie powinieneś również przekazywać~/.ssh/config
linii poleceń. Tylkoalias ssh='ssh -F ~/.ssh/foo.config'
i~/.ssh/config
powinno się podniósł po tym. Dopóki nie przeszkadza cifoo.config
to, że najpierw zostanie załadowane, powinno to być czystsze niż powyższe obejście.Począwszy od wersji ssh 7.3 (wydanej 1 sierpnia 2016 r.),
Include
Dostępna jest dyrektywa.(Oto link do usuniętego raportu o błędzie, który obejmuje również łatkę: https://bugzilla.mindrot.org/show_bug.cgi?id=1585#c24 )
źródło
Podobnie jak inne „brzydkie”, oto moje jedno-liniowe:
źródło
sftp
polecenie nie spowoduje ponownego obliczenia konfiguracji.Cóż, trochę oszukuję, aby to zrobić. W moich plikach .profile-ish bash mam blok, który zastępuje różne części mojego katalogu domowego podczas logowania, więc po prostu generuję nowy za każdym razem. Przykład:
Pozwala mi to także dodawać bloki konfiguracyjne do pliku konfiguracyjnego ssh tylko wtedy, gdy korzystam z hosta A lub B, ale nie w moich systemach domowych.
Teraz wiem, że ktoś się zorientuje, że jeśli dużo się zalogujesz, może to spowodować nadmierne spowolnienie, ale w praktyce nigdy tego nie zauważyłem. I jestem pewien, że możesz umieścić to w skrypcie i odpalić również za pomocą crona.
źródło
Osobiście używam tych poleceń do kompilacji konfiguracji ssh:
lub:
dlatego:
nie działa dla mnie, zwracając:
Mam nadzieję, że to pomoże.
źródło
Kolejne rozwiązanie oparte na BEZPIECZNIKU (sam nie testowałem):
https://github.com/markhellewell/sshconfigfs
„Zamiast nadal zarządzać jednym dużym plikiem, [...] zamiast tego dynamicznie buduj„ plik konfiguracyjny ”z wielu mniejszych fragmentów logicznych”.
Znalazłem również artykuł robiąc to za pośrednictwem FIFO: http://www.linuxsysadmintutorials.com/multiple-ssh-client-configuration-files/
źródło
Żadne z tych rozwiązań aliasowych nie działa w przypadku
git
innych programów niżssh
.Uderzyłem szybko i brudno, ale możesz chcieć to poprawić.
Dodaj to do swojego
~/.bashrc
Za każdym razem, gdy zaczynasz sesję, scala ona wszystkie pliki
~/.ssh/config.d
. (linia 3)Minusem tej wersji jest to, że jeśli zmienisz
~/.ssh/config
następną sesję, otworzysz zmiany, które zostałyby utracone, aby zapobiec przeniesieniu istniejącego pliku do pliku .bak. (wiersz 2) Problem polega na tym, że po chwili będziesz mieć mnóstwo plików .bak.źródło
is_anything_changed
warunkuMożesz łatwo zaktualizować wersję SSH na Ubuntu do wersji 7.3 (testowanej na Ubuntu Xenial 16.04), instalując pakiety z Yakkety:
Sprawdź wersję SSH
Skonfiguruj SSH do użycia zawiera z katalogu ~ / .ssh / config.d
źródło
Moja głupia odpowiedź:
Więc zdecydowałem się na to:
~/.ssh/config.d/
cat ~/.ssh/config.d/* > ~/.ssh/config
Include config.d/*
źródło
Nie mogę także zaktualizować SSH na moim komputerze.
Użyłem GNU make do wygenerowania pliku konfiguracyjnego ssh tylko w razie potrzeby :
Następnie ssh jest aliasowane do
To działa jak urok.
źródło