Mam skonfigurowanych kilka serwerów ~/.ssh/config
, takich jak alpha
i beta
. Jak mogę skonfigurować Bash, aby polecenia ssh al<tab>
i scp file.tgz al<tab>
autouzupełnianie nazw skonfigurowanych serwerów?
Nie chcę dodawać serwerów do innego pliku (tj. Tablicy Bash) przy każdym dodawaniu, ponieważ regularnie dodajemy i usuwamy serwery, a lista jest dość duża.
bash
ssh
autocomplete
scp
dotancohen
źródło
źródło
bash-completion
zainstalowany.Odpowiedzi:
Znaleziono to !!
Wygląda na to, że w Ubuntu wpisy w
~/.ssh/known_hosts
są zaszyfrowane , więc zakończenie SSH nie może ich odczytać. To funkcja, a nie błąd. Nawet dodającHashKnownHosts no
do~/.ssh/config
i/etc/ssh/ssh_config
nie był w stanie zapobiec hashowania hosta.Jednak gospodarze, którymi jestem zainteresowany, również znajdują się w
~/.ssh/config
. Oto skrypt dla Bash Completion, który odczytuje wpisy z tego pliku:Włóż ten skrypt,
/etc/bash_completion.d/ssh
a następnie pobierz go za pomocą następującego polecenia:Uważam ten przewodnik za nieoceniony i bez niego nie byłbym w stanie go napisać. Dziękuję Steve'owi Kempowi za napisanie tego wspaniałego przewodnika!
źródło
/etc/hosts
środku, inne dystrybucje mogą zrobić to samo.Zapakowane
Nie mówisz, jakiej dystrybucji używasz, ale na moim systemie Fedora 19 mam zainstalowany następujący pakiet,
bash-completion
który udostępnia tę funkcję poprzez ten plik reguł uzupełniania:Oto pakiet, który zainstalowałem:
Jeśli przejrzysz ten plik reguł, zobaczysz sekcje, które przesłuchują ten
$HOME/.ssh/config
plik:Tocząc własne
Znalazłem także Gist, known_hosts_autocomplete.sh , który robi coś podobnego oprócz
$HOME/.ssh/known_hosts
pliku.Możesz zrobić coś podobnego, korzystając z
$HOME/.ssh/config
pliku, jeśli z jakiegoś powodu nie możesz znaleźć pliku reguły uzupełniania dlassh
już wstępnie spakowanego.źródło
/usr/share/bash-completion/completions/ssh
. Czy możesz gdzieś opublikować cały plik, aby go skopiować? Dzięki!/usr/share/bash-completion/completions/ssh
przeszkadzam , ale nawet skopiowanie pliku ssh z tego archiwum tar nie pomaga! Uruchamianiecomplete -W ...
polecenia z wiersza polecenia Bash również nie działa . Co może być tutaj problemem?ssh
lubscp
.Odkryłem, że autouzupełnianie nie działa, ponieważ Ubuntu haszy znanych hostów. Możesz dodać
Do twojego
.ssh/config
pliku, ale istniejące hosty nie zostaną odszyfrowane.źródło
~/.ssh/config
i zmieniłem ją w/etc/ssh/ssh_config
, i usunąłem~/.ssh/known_hosts
plik. Po ponownym zalogowaniu się na serwerach nazwy hostów są nadal zapisywane w stanie mieszanym..ssh/config
plików będzie już miało tę linię. Daj znać, jeśli to zadziała.Aby włączyć autouzupełnianie ssh w Debianie i Ubuntu:
Zauważ, że nie ma to nic wspólnego z mieszaniem znanego hosta, w przeciwieństwie do tego, co zostało powiedziane powyżej i pierwotne pytanie. Jeśli chcesz autouzupełnianie ze znanych_hostów, oczywiście musisz wyłączyć haszowanie, ale jest to zdecydowanie zalecane przeciwko.
Mam na przykład:
w moim .ssh / config i nadal mam automatyczne uzupełnianie ssh działające w porządku przeciwko hostom wymienionym w .ssh / config i / etc / hosts. Musisz dodać hosta do .ssh / config, jak stwierdził OP:
Host my-awesome-host Nazwa hosta the.real.host.name
(Lub możesz dodać wpis hosta do / etc / hosts, który jest innym źródłem skryptów Debian / Ubuntu.)
Następnie możesz po prostu wpisać,
ssh my-awe<tab>
a zostanie ono automatycznie ukończone. Znowu dzieje się tak nawet w przypadku HashKnownHosts, co jest wysoce zalecane. (Zauważ, że ukończenie bash musi być włączone w twojej powłoce bash i musisz specjalnie zainstalować te skrypty jak wyżej dla twojej dystrybucji.)Następnie dodaj te wiersze do swojego,
.bashrc
aby go włączyć (wymaga wylogowania i zalogowania się ponownie lub po prostu nowegobash
wpisania w celu uruchomienia nowej powłoki. (Nie musisz włączać, jeśli jest już włączony/etc/bash.bashrc
i/etc/profile
źródła/etc/bash.bashrc
).Umożliwi to ssh autouzupełnianie (między innymi!) Z
~/.ssh/config
,/etc/hosts
itpZauważ, że Debian domyślnie używa ash zamiast bash. Możesz łatwo przejść na bash:
(Musisz się wylogować i zalogować ponownie, aby to zadziałało).
źródło
W systemie Ubuntu 14.04
ssh
automatyczne uzupełnianie serwerów wymienionych w twoim~/.ssh/config
Zauważyłem to, gdy zdałem sobie sprawę, że tylko jeden z serwerów, do których często uzyskuję dostęp do automatycznego uzupełniania. Jedyną różnicą między nimi był wpis w pliku konfiguracyjnym ssh związany z uwierzytelnianiem. Kiedy dodałem nowy wpis do pliku konfiguracyjnego dla drugiego serwera, zaczął on również automatyczne uzupełnianie.
Oto wpis dla tych, którzy pytali:
Byłbym bardzo zaskoczony, gdyby miało to znaczenie dla tego, co określiłeś w konfiguracji (o ile oczywiście jest to nadal ważne).
źródło