opened image

Konfiguracja automatycznego uzupełniania poleceń SSH z pliku .ssh/config

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:

ssh [email protected]

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.