Aby uczynić proces wprowadzania poleceń umożliwiających połączenie z serwerami szybszym i wygodniejszym, istnieje przydatna funkcja automatycznego uzupełniania poleceń SSH. Funkcja ta wykorzystuje pliki konfiguracyjne. Najlepiej i najefektywniej jest skonfigurować automatyczne uzupełnianie dla węzłów sieciowych określonych w .ssh/config, co znacznie upraszcza połączenie z potrzebnymi serwerami. W tym materiale omówimy, jak zrealizować tę konfigurację w systemach operacyjnych Linux i macOS.
Plik .ssh/config odgrywa ważną rolę w strukturyzowaniu listy hostów i ułatwieniu dostępu do nich podczas zarządzania wieloma zdalnymi serwerami. Jednak ciągłe ręczne wprowadzanie nazw serwerów za każdym razem jest nieefektywne, dlatego można uprościć ten proces, konfigurując automatyczne uzupełnianie.
.ssh/config - co to jest?
Dokument tekstowy .ssh/config to plik, który zawiera ustawienia dla połączeń SSH. Dzięki .ssh/config zyskujesz możliwość wykorzystania kluczy, oznaczenia standardowych portów, ustawienia aliasów dla serwerów oraz określenia innych parametrów połączenia. Każdy host w tej konfiguracji może mieć swój unikalny alias, co upraszcza proces połączenia SSH.
Plik .ssh/config można otworzyć w ulubionym edytorze tekstu. Może to być na przykład gedit, vim lub nano. Jeśli dokument .ssh/config nie istnieje, podczas używania polecenia zostanie automatycznie utworzony.
Jak używać pliku na przykładzie wspomnianych edytorów graficznych?
Edytor nano:
nano ~/.ssh/config
Przykład vim:
vim ~/.ssh/config
Przykład gedit (dla miłośników interfejsu graficznego):
gedit ~/.ssh/config &
W przypadku braku edytora graficznego, instalację można przeprowadzić za pomocą następującego polecenia:
sudo snap install gedit
Przykład pliku tekstowego .ssh/config:
nano ~/.ssh/config
Host example-server
HostName 192.168.1.100
User user1
Port 2222
Następnie, aby uniknąć dalszego ręcznego wprowadzania pełnego polecenia do połączenia:
ssh [email protected] -p 2222
Można użyć następującej opcji:
ssh example-server
Po co potrzebne jest automatyczne uzupełnianie?
Dzięki kilku praktycznym zaletom, które znacznie zwiększają wygodę pracy, funkcja automatycznego uzupełniania SSH w Ubuntu zmniejsza czas potrzebny na wprowadzanie poleceń i poprawia interakcję z zdalnymi serwerami. Oto główne argumenty na rzecz automatycznego uzupełniania:
- Uproszczenie pracy. Automatyczne uzupełnianie umożliwia szybsze wprowadzanie potrzebnych poleceń, co jest szczególnie ważnym elementem podczas pracy z długimi ścieżkami lub skomplikowanymi poleceniami. Nie musisz już ciągle wpisywać ich ręcznie.
Przyjrzyjmy się sytuacji, gdy musisz wprowadzić adres konkretnego hosta. Aby uniknąć wpisywania następującej wersji:
Wystarczy wpisać:
ssh use[TAB]
Po tym imię zostanie automatycznie uzupełnione przez system do pełnej wartości.
- Zmniejszenie błędów. Dzięki automatycznemu uzupełnianiu zmniejsza się prawdopodobieństwo literówek i błędnego wprowadzania skomplikowanych i długich poleceń, co prowadzi do rzadszych awarii. Automatyczne wprowadzanie oferuje poprawne opcje, odwołując się do wcześniej skonfigurowanych hostów w .ssh/config
- Optymalizacja pracy przez SSH. Automatyczne uzupełnianie rozpoznaje wpisy z parametrami połączenia do różnych hostów, jeśli twój plik .ssh/config jest już skonfigurowany, a następnie zaproponuje te wpisy podczas pisania polecenia ssh. Dzięki takiemu systemowi automatycznego uzupełniania można szybko znaleźć już skonfigurowane serwery i połączyć się z nimi.
Jak to może być zapisane w pliku .ssh/config:
Host myserver
HostName myserver.com
User myusername
Port 2222
W rezultacie, opierając się na twoich konfiguracjach, po wpisaniu ssh myser[TAB], system zaproponuje ci opcje automatycznego uzupełnienia.
- Łatwość pracy z wieloma serwerami. Przy interakcji z wieloma serwerami funkcja automatycznego uzupełniania znacznie ułatwia proces zarządzania. Nie ma potrzeby zapamiętywania każdej kombinacji dla domen lub adresów IP — można polegać na konfiguracji dokumentu .ssh/config, a system samodzielnie zaproponuje możliwe opcje.
- Oszczędność czasu. Podczas korzystania z automatycznego uzupełniania SSH użytkownicy mogą zaoszczędzić czas na połączenie z serwerem, nie wprowadzając całego polecenia od zera, a po prostu powielając już istniejące polecenia lub ścieżki. Funkcja ta jest niezwykle przydatna dla tych, którzy regularnie korzystają z wielu zdalnych serwerów, na przykład programistów i administratorów systemów.
- Zwiększenie wydajności: Automatyczne uzupełnianie pozwala skupić się na ważniejszych zadaniach, minimalizując rutynowe działania podczas pracy ze skryptami i w terminalu. Ponadto automatyczne uzupełnianie można stosować w innych przypadkach, jeśli wszystko jest poprawnie skonfigurowane, może to znacznie zmniejszyć ilość wykonywanej pracy i zwiększyć wydajność.
Te zalety czynią automatyczne uzupełnianie niezastąpionym narzędziem dla ekspertów i nowicjuszy pracujących z SSH w Ubuntu.
Konfiguracja automatycznego uzupełniania bash-completion dla SSH
Pierwszy etap: konfiguracja
Aby skonfigurować automatyczne uzupełnianie SSH, potrzebujesz zainstalowanego pakietu bash-completion. Pakiet ten jest zazwyczaj preinstalowany w nowoczesnych dystrybucjach Linuxa, ale jeśli go nie ma, można go zainstalować.
Instalacja bash-completion na platformach Ubuntu i Debian:
sudo apt update
sudo apt install bash-completion
Instalacja bash-completion na platformach CentOS i Fedora:
sudo yum install bash-completion
Dla Arch Linux: sudo pacman -S bash-completion
Aktywacja:
Po zakończeniu instalacji należy sprawdzić aktywność automatycznego uzupełniania, dodając do pliku .bashrc lub .bash_profile następujący wiersz:
nano ~/.bashrc
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
Po sprawdzeniu aktywacji uzupełnienia zrestartuj terminal lub użyj następującego polecenia:
source ~/.bashrc
Drugi etap: Konfiguracja automatycznego uzupełniania SSH
Na drugim etapie konfiguracji należy dodać automatyczne uzupełnianie do hostów w dokumencie .ssh/config.
Aby przeprowadzić tę procedurę, użyj skryptu uzupełniającego:
W folderze /etc/bash_completion.d/ twórz lub edytuj już istniejący plik automatycznego uzupełniania. Następujący skrypt pomoże automatycznie załadować wymagane hosty z dokumentu .ssh/config.
Utwórz plik /etc/bash_completion.d/ssh:
sudo nano /etc/bash_completion.d/ssh
Wklej następujący kod do otwartego pliku:
_ssh_hosts() {
COMPREPLY=($(compgen -W "$(awk '/^Host / {print $2}' ~/.ssh/config)" -- "${COMP_WORDS[COMP_CWORD]}"))
}
complete -F _ssh_hosts ssh
Ten skrypt wyciąga nazwy hostów z pliku .ssh/config i przekazuje je do automatycznego uzupełniania.
Zapisz plik i zamknij edytor.
Aktywuj zmiany:
source /etc/bash_completion.d/ssh
Teraz przy wprowadzaniu polecenia ssh i rozpoczynaniu wpisywania nazwy hosta system zaproponuje opcje automatycznego uzupełniania.
Sprawdzenie działania
Aby sprawdzić działanie automatycznego uzupełniania, po prostu zacznij wpisywać polecenie SSH i naciśnij klawisz Tab. Jeśli wszystko jest poprawnie skonfigurowane, system zaproponuje listę dostępnych hostów z twojego pliku .ssh/config.
Przykład:
ssh exa<Tab>
Wynik:
ssh example-server
Wsparcie dla automatycznego uzupełniania w innych powłokach
Automatyczne uzupełnianie możliwe jest nie tylko dla Bash. Jeśli używasz innych powłok, takich jak Zsh, automatyczne uzupełnianie również można skonfigurować.
Konfiguracja automatycznego uzupełniania dla Zsh
Dla użytkowników Zsh proces konfiguracji jest nieco inny. Musisz w pliku .zshrc wpisać poniższą linię, aby upewnić się, że automatyczne uzupełnianie jest aktywne:
autoload -U compinit && compinit
Następnym krokiem jest stworzenie funkcji automatycznego uzupełniania:
_ssh_hosts_zsh() {
local hosts
hosts=(${(f)"$(awk '/^Host / {print $2}' ~/ ssh/config)"})
_describe -t hosts 'SSH Hosts' hosts
}
compdef _ssh_hosts_zsh ssh
Po wykonaniu tych czynności zapisz i zrestartuj swój terminal:
source ~/.zshrc
Po pomyślnym zakończeniu całego procesu instalacji, automatyczne uzupełnianie w Zsh będzie gotowe do użycia.
Interakcja z wieloma plikami konfiguracyjnymi
W niektórych sytuacjach może być przydatne rozdzielenie ustawień dla SSH na kilka plików. Na przykład może to być związane z różnymi grupami serwerów. W takim przypadku konfiguracja automatycznego uzupełniania powinna uwzględniać wszystkie pliki konfiguracyjne.
Aby to zrobić, można dodać kilka źródeł konfiguracji:
_ssh_hosts() {
COMPREPLY=($(compgen -W "$(awk '/^Host / {print $2}' ~/.ssh/config ~/.ssh/config.d/*)" -- "${COMP_WORDS[COMP_CWORD]}"))
}
complete -F _ssh_hosts ssh
Teraz automatyczne uzupełnianie będzie działać dla wszystkich hostów określonych we wszystkich plikach w katalogu ~/.ssh/config.d/.
Podsumowanie
Konfiguracja automatycznego uzupełniania poleceń SSH dla węzłów określonych w dokumencie .ssh/config jest kluczowym krokiem, który pozwala zwiększyć efektywność pracy oraz zmniejszyć prawdopodobieństwo błędów podczas interakcji z zdalnymi serwerami. Dzięki temu trybowi uprościsz sobie połączenia i zyskasz możliwość skupienia się na pracy z kluczowymi zadaniami, niezależnie od użycia Zsh lub Bash.
Ważne jest, aby nie zapominać o utrzymywaniu pliku tekstowego .ssh/config w aktualnym stanie i regularnym aktualizowaniu go. To pozwoli ci na bezproblemowe i proste zarządzanie dużymi infrastrukturami serwerowymi, bez potrzeby zapamiętywania skomplikowanych poleceń do połączenia.