Chciałbym skonfigurować uzupełnianie poleceń na zsh, aby wyświetlały nazwy hostów po wpisaniu
ssh [TAB]
usunięcie nazw z mojego pliku .ssh / config (najlepiej z znanych hostów i / etc / hosts i gdziekolwiek to ma sens) i przedstawienie jednej pojedynczej listy.
Obecnie robi to częściowo, ale
- w ogóle nie używa .ssh / config
- wymaga najpierw nazwy użytkownika, mimo że użycie .ssh / config sprawia, że wpisywanie nazw użytkowników jest niepotrzebne
- prezentuje wiele list (prawdopodobnie jedną ze znanych hostów i drugą z / etc / hosts, ale tego nie zweryfikowałem)
Dlatego chcę wpisać znane nazwy użytkowników, a także znane nazwy hostów na liście (najlepiej pojedynczej) po wpisaniu ssh [TAB]
(Przychodzę tu przed Google, ponieważ 1) spowoduje zapisanie odpowiedzi tutaj i 2) prawdopodobnie jest bardziej wydajna. Jeśli nikt inny nie odpowie, odszukam odpowiedź.)
ssh
shell
zsh
command-line-interface
ikonoklasta
źródło
źródło
Odpowiedzi:
Oto odpowiednia część z mojego
.zshrc
. Nie zmieniło się od 2002 roku, więc mogę dziś napisać inaczej, ale nadal działa, aby uzupełnić nazwy hostów od~/.ssh/config
i~/.ssh/known_hosts
(jeśliHashKnownHosts
jest wyłączone - wtedy nie istniało).źródło
Funkcja zapewniająca
ssh
zakończenie znajduje się w/usr/share/zsh/functions/Completion/Unix/_ssh
moim systemie.Zobacz także
man zshcompsys
dokumentację (szczególnie wyszukaj „host”, który pojawia się w wielu miejscach i „ssh”, który pojawia się w kilku miejscach).Możliwe, że dodanie
zstyle
polecenia~/.zshrc
spowoduje zrobienie tego, czego szukasz, bez konieczności modyfikowania funkcji uzupełniania.źródło
/usr/share/zsh/4.3.9/functions/_ssh
Mac OS X (dostosuj wersję)Robię to za pomocą listy wszystkich hostów w danej domenie za pomocą dig. Możesz zastąpić tę funkcję dowolnym systemem wyszukiwania, w tym plikiem hosta lub listą statyczną:
Uwaga: powyższy kod może nie całkowicie zastąpić całego systemu dla komendy ssh w konfiguracji. Jeśli masz z tym problemy, spróbuj zmienić komendę „ssh” na inną losową komendę, taką jak „mycompletetest” i sprawdź, czy zakończenie to działa.
Pamiętaj też, że powoduje to przeniesienie strefy dns przy każdym zakończeniu! Jeśli używasz tego często lub w dość statycznej domenie, sensowne byłoby wykonanie wyszukiwania i zapisanie wyniku, a następnie w funkcji wyszukiwania wystarczy ustawić odpowiedź = zone_result.
źródło
dig axfr mydomain.com @ns1.mydomain.com
. Upewnij się, że możesz uruchomić to ręcznie, a częścią danych wyjściowych powinna być lista hostów zarejestrowanych w tej domenie i ich A lub dowolne rekordy. Właśnie o to prosiłem, a potem odciąłem tylko część nazwy hosta, a nie w pełni kwalifikowany rekord.Lubię przechowywać
known_hosts
plik z hashowaniem i wolę się nieHashKnownHosts
wyłączać. Przekonałem się, że zasianie tego, co @Gilles ma już w mojej historii, jest całkiem skuteczne dla moich potrzeb.Ponadto, FWIW, to właśnie użyłem do Bash:
źródło