opened image

SSH ბრძანებების ავტომატური დასრულების კონფიგურაცია .ssh/config ფაილიდან

კომანდების შეყვანის პროცესის უფრო სწრაფი და კომფორტული გზით სერვერებთან დაკავშირებისათვის არსებობს სასარგებლო ფუნქცია SSH კომანდების ავტომატური დასრულების. ეს ფუნქცია იყენებს კონფიგურაციის ფაილებს. უკეთესი და ეფექტური იქნება ავტოდამატების კონფიგურაციის გამოყენება ქსელური узловებისათვის, რომლებიც მითითებულია .ssh/config-ში, რაც მნიშვნელოვნად ამარტივებს საჭირო სერვერებთან დაკავშირებას. მოცემულ მასალაში შევისწავლით, როგორ უნდა განვახორციელოთ ეს კონფიგურაცია Linux და macOS ოპერაციული სისტემებისათვის.

 

ფაილი .ssh/config მნიშვნელოვან როლს თამაშობს ჰოსტების სიის სტრუქტურირებაში და მათთან წვდომის გამარტივებაში მრავალი შორეული სერვერის მართვისას. თუმცა, მუდმივი ხელით სერვერების სახელების შეყვანა ყოველი ჯერზე არ არის ეფექტური, ამიტომ ამ პროცესის გამარტივება შესაძლებელია ავტომატური დასრულების კონფიგურაციის საშუალებით.

 

.ssh/config - რა არის ეს? 

 

ტექსტური დოკუმენტი .ssh/config წარმოადგენს ფაილს, რომელიც შეიცავს SSH კავშირების პარამეტრებს. .ssh/config-ის საშუალებით თქვენ მიიღებთ შესაძლებლობას გამოიყენოთ გასაღებები, მიუთითოთ სტანდარტული პორტები, დააწესოთ ფსევდონიმები (ალიასები) სერვერებისათვის და განსაზღვროთ სხვა პარამეტრები. თითოეულ ჰოსტს ამ კონფიგურაციაში შეიძლება ჰქონდეს თავისი უნიკალური ალიასი, რაც ამარტივებს SSH კავშირის პროცესს.

 

ფაილი .ssh/config მშვიდად იხსნება თქვენთვის საყვარელი რედაქტორით. ეს შეიძლება იყოს, მაგალითად, gedit, vim ან nano. თუ .ssh/config დოკუმენტი არ არსებობს, ბრძანების გამოყენებისას ის ავტომატურად შეიქმნება. 

 

როგორ გამოვიყენოთ ფაილი ზემოთ აღნიშნული გრაფიკული რედაქტორების მაგალითზე?

 

რედაქტორი nano:

nano ~/.ssh/config

მაგალითი vim:

vim ~/.ssh/config

მაგალითი gedit (გრაფიკული ინტერფეისის მოყვარულთათვის):

gedit ~/.ssh/config &

თუ გრაფიკული რედაქტორი არ გაქვთ, შეგიძლიათ დააყენოთ შემდეგი ბრძანების საშუალებით:

sudo snap install gedit


 

.ssh/config-ის ტექსტური ფაილის ნიმუში:

nano ~/.ssh/config

Host example-server

HostName 192.168.1.100

User user1

Port 2222


 

შემდეგ, რათა თავიდან ავიცილოთ სრული კომანდის ხელით შეყვანა:

ssh [email protected] -p 2222

შეგიძლიათ გამოიყენოთ შემდეგი ვარიანტი:

ssh example-server


 

რატომ არის საჭირო ავტომატური დასრულება?

 

ბევრი პრაქტიკული უპირატესობით, რაც მნიშვნელოვნად ზრდის მუშაობის კომფორტს, SSH-ის ავტომატური დასრულების ფუნქცია Ubuntu-ში ამცირებს კომანდების შეყვანისთვის საჭირო დროს და აუმჯობესებს შორეულ სერვერებთან ურთიერთობას. აი, ავტომატური დასრულების მთავარი არგუმენტები:

 

  • მუშაობის გამარტივება. ავტომატური დასრულება საშუალებას გაწვდით საჭირო კომანდების უფრო სწრაფად დაწერას, რაც განსაკუთრებით მნიშვნელოვანია გრძელი გზების ან რთული კომანდების მუშაობისას. თქვენ აღარ გჭირდებათ მათი მუდმივი ხელით დაწერა.

მოვხედოთ სიტუაციას, როდესაც თქვენ უნდა შეიყვანოთ კონკრეტული ჰოსტის მისამართი. რათა თავიდან ავიცილოთ შემდეგი ვარიანტის შეყვანა:

ssh [email protected]

კმარა მხოლოდ დაწეროთ:

ssh use[TAB]

ამის შემდეგ, სახელი ავტომატურად იქნება დამატებული სისტემის მიერ აბსოლუტურ მნიშვნელობამდე.

 

  • შეცდომების შემცირება. ავტომატური დასრულების წყალობით მცირდება შეცდომების და არასწორი შეყვანის ალბათობა რთული და გრძელი კომანდების, რაც იწვევს ნაკლებად ხშირი შეცდომების. ავტომატური შეყვანა სთავაზობს სწორ ვარიანტებს, მიმართული ადრე კონფიგურირებულ ჰოსტებზე .ssh/config-ში

 

  • SSH-ის მუშაობის ოპტიმიზაცია. ავტომატური დასრულება აღიარებს ჩანაწერებს კავშირების პარამეტრებით სხვადასხვა ჰოსტებთან, იმ შემთხვევაში, როდესაც თქვენი .ssh.config ფაილი უკვე არის კონფიგურირებული, რის შემდეგაც გთავაზობთ ამ ჩანაწერებს SSH კომანდის დაწერისას. ასეთი სისტემის წყალობით ავტომატური შერჩევა საშუალებას გაწვდით სწრაფი ძიების შესაძლებლობას უკვე კონფიგურირებულ სერვერებზე და მათთან დაკავშირებაზე.

 

როგორ შეიძლება ეს იყოს ჩაწერილი .ssh/config ფაილში:

Host myserver

HostName myserver.com

User myusername

Port 2222

 

შედეგად, თქვენი კონფიგურაციების საფუძველზე, ssh myser[TAB]-ის შეყვანის შემდეგ, სისტემა გირჩევთ ავტომატური დასრულების ვარიანტებს.

 

  • მრავალ სერვერთან მუშაობის სიმარტივე. რამდენიმე სერვერთან ერთდროულად ურთიერთობისას ავტომატური დასრულების ფუნქცია მნიშვნელოვნად ამარტივებს მართვის პროცესს. არ არის საჭირო თითოეული კომბინაციის დამახსოვრება დომენების ან IP მისამართებისათვის —  შეგიძლიათ მოიხმაროთ .ssh/config დოკუმენტის კონფიგურაცია, და სისტემა თავად გთავაზობთ შესაძლო ვარიანტებს.

 

  • დროის დაზოგვა. SSH-ის ავტომატური დასრულების გამოყენებისას მომხმარებლები შეუძლიათ დაზოგონ დრო სერვერთან დაკავშირებაზე, არ შეყვანონ მთელი კომანდა თავიდან, არამედ უბრალოდ გაამეორონ უკვე არსებული კომანდები ან გზები. ეს ფუნქცია განსაკუთრებით სასარგებლოა მათთვის, ვინც მუდმივად მიმართავს მრავალ შორეულ სერვერს. მაგალითად, პროგრამისტების და სისტემური ადმინისტრატორებისათვის. 

 

  • პროდუქტიულობის გაზრდა: ავტომატური დასრულება საშუალებას გაწვდით ყურადღება გაამახვილოთ უფრო მნიშვნელოვან დავალებებზე, მინიმუმამდე დაიყვანოთ რუტინული მოქმედებები სკრიპტებთან და ტერმინალთან მუშაობისას. გარდა ამისა, ავტომატური დასრულება შესაძლებელია გამოყენებულ იქნას სხვა შემთხვევებში, თუ ყველაფერი სწორად არის კონფიგურირებული, ეს შეიძლება მნიშვნელოვნად შეამციროს შესრულებული სამუშაოს მოცულობა და გაზარდოს პროდუქტიულობა.

 

ეს უპირატესობები ავტომატურ დასრულებას შეუცვლელ ინსტრუმენტად აქცევს ექსპერტებისა და ახალბედებისათვის, რომლებიც მუშაობენ SSH-თან Ubuntu-ში.

 

bash-completion-ის ავტომატური დასრულების კონფიგურაცია SSH-ისათვის

 

პირველი ეტაპი: კონფიგურაცია

SSH-ის ავტომატური დასრულების კონფიგურაციისათვის თქვენ გჭირდებათ bash-completion-ის ინსტალირებული პაკეტი. ეს პაკეტი ჩვეულებრივ წინასწარ არის დაყენებული თანამედროვე Linux დისტრიბუციებში, მაგრამ თუ არ გაქვთ, შეგიძლიათ დააყენოთ.

 

bash-completion-ის ინსტალაცია Ubuntu და Debian პლატფორმებზე:

sudo apt update

sudo apt install bash-completion


 

bash-completion-ის ინსტალაცია CentOS და Fedora პლატფორმებზე:


sudo yum install bash-completion

Arch Linux-ისათვის: sudo pacman -S bash-completion

აქტივაცია:

ინსტალაციის დასრულების შემდეგ უნდა შეამოწმოთ ავტომატური დასრულების აქტივობა .bashrc ან .bash_profile ფაილში შემდეგი სტრიქონის დამატებით:

nano ~/.bashrc

if [ -f /etc/bash_completion ]; then

    . /etc/bash_completion

fi

როდესაც შეამოწმებთ დამატების აქტივაციას, განაახლეთ ტერმინალი ან გამოიყენეთ შემდეგი ბრძანება:

source ~/.bashrc

 

მეორე ეტაპი: SSH-ის ავტომატური დასრულების კონფიგურაცია

 

მეორე ეტაპზე კონფიგურაციისათვის თქვენ უნდა დაამატოთ ავტომატური დასრულება ჰოსტებზე .ssh/config დოკუმენტში.

ამ პროცესის გასატარებლად, გამოვიყენოთ დასრულების სკრიპტი:

ფოლდერში /etc/bash_completion.d/ შექმენით ან შეცვალეთ უკვე არსებული ავტომატური დასრულების ფაილი. შემდეგი სკრიპტი დაგეხმარებათ ავტომატურად დატვირთოს საჭირო ჰოსტები .ssh/config დოკუმენტიდან.

შექმენით ფაილი /etc/bash_completion.d/ssh:

sudo nano /etc/bash_completion.d/ssh


ჩაწერეთ შემდეგი კოდი გახსნილ ფაილში:

_ssh_hosts() {

    COMPREPLY=($(compgen -W "$(awk '/^Host / {print $2}' ~/.ssh/config)" -- "${COMP_WORDS[COMP_CWORD]}"))

}

complete -F _ssh_hosts ssh


 

ეს სკრიპტი იღებს ჰოსტების სახელებს .ssh/config ფაილიდან და გადასცემს მათ ავტომატური დასრულებისათვის.

შეინახეთ ფაილი და დახურეთ რედაქტორი.

აქტივაცია ცვლილებების:

source /etc/bash_completion.d/ssh

ახლა, როდესაც თქვენ აკრიფებთ SSH კომანდას და იწყებთ ჰოსტის სახელის შეყვანას, სისტემა გთავაზობთ ავტომატური დასრულების ვარიანტებს.

 

დამატების მუშაობის შემოწმება

ავტომატური დასრულების მუშაობის შესამოწმებლად, უბრალოდ დაიწყეთ SSH კომანდის აკრიფვა და დააჭირეთ Tab-ის ღილაკს. თუ ყველაფერი სწორად არის კონფიგურირებული, სისტემა გთავაზობთ თქვენს .ssh/config ფაილში ხელმისაწვდომი ჰოსტების სიას.

მაგალითი:

ssh exa<Tab>

შედეგი:

ssh example-server


 

ავტომატური დასრულების მხარდაჭერა სხვა შელფებისათვის

ავტომატური დასრულება შესაძლებელია არა მხოლოდ Bash-ისათვის. თუ თქვენ იყენებთ სხვა შელფებს, როგორიცაა Zsh, ავტომატური დასრულება ასევე შეიძლება კონფიგურირდეს.

 

ავტომატური დასრულების კონფიგურაცია Zsh-ისათვის

Zsh-ის მომხმარებლებისათვის კონფიგურაციის პროცესი ცოტა განსხვავებულია. თქვენ უნდა ჩაწეროთ შემდეგი სტრიქონი .zshrc ფაილში, რათა დარწმუნდეთ ავტომატური დასრულების აქტივობაში:

autoload -U compinit && compinit 

შემდეგი ნაბიჯი არის ავტომატური დასრულების რეჟიმის შექმნა:

_ssh_hosts_zsh() {

    local hosts

    hosts=(${(f)"$(awk '/^Host / {print $2}' ~/ ssh/config)"})

    _describe -t hosts 'SSH Hosts' hosts

}

compdef _ssh_hosts_zsh ssh

გააკეთეთ ცვლილებები, შეინახეთ და განაახლეთ თქვენი ტერმინალი:

source ~/.zshrc

წარმატებით დასრულების შემდეგ, Zsh-ში ავტომატური დასრულება იქნება აქტიური.

 

მრავალ კონფიგურაციის ფაილებთან ურთიერთობა

 

ზოგიერთ სიტუაციაში სასარგებლოა SSH-ის პარამეტრების განაწილება რამდენიმე ფაილზე. მაგალითად, ეს შეიძლება იყოს დაკავშირებული სხვადასხვა სერვერების ჯგუფებთან. ამ შემთხვევაში ავტომატური დასრულების კონფიგურაცია უნდა ითვალისწინებდეს ყველა კონფიგურაციის ფაილს.

ამისათვის შეგიძლიათ დაამატოთ რამდენიმე კონფიგურაციის წყარო:

_ssh_hosts() {

    COMPREPLY=($(compgen -W "$(awk '/^Host / {print $2}' ~/.ssh/config ~/.ssh/config.d/*)" -- "${COMP_WORDS[COMP_CWORD]}"))

}

complete -F _ssh_hosts ssh

ახლა ავტომატური დასრულება იმუშავებს ყველა ჰოსტზე, რომელიც მითითებულია ყველა ფაილში დირექტორიაში ~/.ssh/config.d/. 

 

 

შედეგი

SSH კომანდების ავტომატური დასრულების კონფიგურაცია ჰოსტებისათვის, რომლებიც მითითებულია .ssh/config დოკუმენტში, არის მნიშვნელოვანი ეტაპი, რომელიც ზრდის მუშაობის ეფექტურობას და ამცირებს შეცდომების ალბათობას შორეულ სერვერებთან ურთიერთობისას. ამ რეჟიმით თქვენ გაამარტივებთ დაკავშირებას და მიიღებთ შესაძლებლობას კონცენტრირდეთ ძირითადი დავალებების შესრულებაზე, მიუხედავად იმისა, რომ იყენებთ Zsh-ს თუ Bash-ს.

მნიშვნელოვანია არ დაგავიწყდეთ .ssh/config ტექსტური ფაილის актуალურ მდგომარეობაში შენარჩუნება და მუდმივად განახლება. ეს მოგაწვდით შესაძლებლობას პრობლემების გარეშე და მარტივად მართოთ დიდი სერვერული ინფრასტრუქტურები, რისათვისაც არ იქნება საჭირო რთული კომანდების დამახსოვრება დაკავშირებისათვის.