Продолжение названия хоста при нажатии Tab

Автор Natalia, 24 октября 2023, 23:18:00

« назад - далее »

0 Пользователи и 2 гостей просматривают эту тему.

Natalia

Добрый день!

Есть машина, на которую хожу по ssh,
> ssh natalia@lion

Она указана в ~/.ssh/config как
host lion
    User natalia
    Hostname 111.22.33.44

Я как-то привыкла, что раньше (на других дистрибутивах Линукса) при наборе, напр., "ssh natalia@li" + Tab слово "lion" дополнялось само. Сейчас у меня это не делается, и имя хоста приходится набирать вручную, что бывает неудобно.

Наверняка это дополнение через Tab где-то должно настраиваться. Вот только где и как?
Если кто знает, подскажите, пожалуйста.

Моя система:
> lsb_release -d && uname -r
No LSB modules are available.
Description:    Debian GNU/Linux 12 (bookworm)
6.3.0-2-amd64
Продолжение обычных команд с помощью Tab работает нормально.


Natalia

Добрый день!

Большое спасибо за ответ, но скрипт в данной вами ссылке не помог.

[Создала скрипт /etc/bash_completion.d/ssh такой, как в ссылке, только в grep-е поставила шаблон '^Host\|^host', т.к. у меня в ~/.ssh/config нужные строки начинаются с маленькой буквы. Добавила в начало ~/.bash_profile строку ". /etc/bash_completion.d/ssh". Перезагрузилась. Не помогло.]

Сейчас обратила внимание, что после двойного нажатия Tab выдаётся некий список хостов (cудя по всему, он взят из /etc/hosts):
natalia@cat:~> ssh natalia@
@::1             @ff02::1         @ip6-allnodes    @ip6-localhost   @localhost
@cat             @ff02::2         @ip6-allrouters  @ip6-loopback
При этом названия машин из этого списка оно умеет продолжать. Но в этом списке нет хостов из ~/.ssh/config...

PS
Извините, что отвечаю с большим перерывом.

mexx

Цитата: Natalia от 24 октября 2023, 23:18:00Она указана в ~/.ssh/config как
Код Выделить Развернуть
host lion
    User natalia
    Hostname 111.22.33.44

При таком раскладе достаточно ввести:
ssh lionИ не нужно никаких дополнений.
Debian 10 KDE
Debian 11 Gnome

Natalia

Цитата: mexx от 08 ноября 2023, 19:53:37При таком раскладе достаточно ввести:
ssh lionИ не нужно никаких дополнений.
Да, спасибо, можно и так. Только вопрос не в этом.

Вопрос в том, как сделать, чтобы нажатие Tab продолжало названия хостов, которые содержатся в ~/.ssh/config. А при двойном нажатии Tab чтобы выдавался список хостов, содержащий в том числе и те, которые в ~/.ssh/config.

Кстати, сейчас, если набираю только "ssh " и дважды нажимаю Tab, почему-то выдаётся содержимое текущей папки...


Natalia

Добрый день!

Большое спасибо!

Все три команды из https://www.opennet.ru/tips/info/2340.shtml при добавлении их в ~/.bashrc работают, но только в формате 'ssh lion'.

А в формате 'ssh natalia@' ничего не дополняется (при двойном нажатии Tab ничего не выводится).

Пока-что лучшее, что мне удалось, это добавить строчку "cur=`...`" в _compssh:
_compssh ()
{
cur=${COMP_WORDS[COMP_CWORD]};
cur=`echo $cur | sed 's+.*@++'`
COMPREPLY=($(compgen -W '$(cut -d " " -f1 ~/.ssh/my_hosts.txt) --all --schema' -- $cur))
}
complete -F _compssh ssh

В таком виде оно дополняет имя хоста, но при этом съедает @...:
natalia@cat:~> ssh
--all              awesome_host       lion               --schema           very_awesome_host
natalia@cat:~> ssh lion ^C
natalia@cat:~> ssh natalia@
--all              awesome_host       lion               --schema           very_awesome_host
natalia@cat:~> ssh natalialion ^C

dzhoser

1. Обзор

Часто бывает полезно связать имя хоста с IP-адресом. Хотя DNS делает это за нас для интернет-хостов, нам также может потребоваться сделать это для определенных IP-адресов в нашей локальной сети, включая IP-адреса, назначенные нашему компьютеру.

IP-адрес нашей машины должен быть связан с именем хоста. В противном случае инструменты и процессы, которые ссылаются на компьютер с использованием имени хоста, вернут ошибку при попытке разрешения имени.

В этом уроке мы обсудим, как связать IP-адрес с именем хоста.
2. Добавление IP-адреса к имени хоста через файл /etc/hosts.

Файл /etc/hosts  представляет собой запись локальных IP-адресов и их псевдонимов. Итак, когда мы хотим назвать IP-адрес, мы редактируем файл /etc/hosts .

Давайте посмотрим на типичный файл хостов:

$ sudo cat /etc/hosts
127.0.0.1       localhost
192.168.56.4    linux

2.1. Связывание имени хоста с IP-адресом

Чтобы связать наш IP-адрес — 192.168.56.4 — с нашим именем хоста — baeldung —  мы можем отредактировать файл хостов  :

127.0.0.1 localhost
192.168.56.4 linux
192.168.56.4 baeldung

Файл хостов допускает дублирование записей, но также позволяет нам помещать несколько имен хостов в одну строку:

127.0.0.1 localhost
192.168.56.4 linux baeldung

2.2. Связывание IP-адреса удаленного компьютера с псевдонимом

Файл хостов также позволяет нам назвать IP-адрес удаленного компьютера в той же частной сети.

Предположим, у нас есть удаленный компьютер в сети с IP-адресом 192.168.56.5 . Мы назовем его компьютером2 :

127.0.0.1 localhost
192.168.56.4 linux baeldung
192.168.56.5 computer2

Итак, теперь мы можем использовать компьютер2 вместо 192.168.56.5 .
2.3. Сопоставление IP-адреса с полным доменным именем

Файл хостов  может выступать для нас альтернативой DNS-серверу .

Например, мы можем сопоставить IP-адрес с именем удаленного .baeldung.com :

127.0.0.1 localhost
192.168.56.4 linux baeldung
192.168.56.5 computer2 remote.baeldung.com

При этом мы настроили нашу машину на использование компьютера2 в качестве Remote.baeldung.com .
Ubuntu->Linux mint->Astra Linux SE->Debian 12
Для новичков