Оптимизация работы с SSH с помощью bash-completion

()

Bash-completion это очень интересная особенность последних версий оболочки bash. Она позволяет создавать свои, настраиваемые схемы автодополнения команд.

SSH это протокол, позволяющий управлять удалённой системой и передавать файлы. Является стандартом де-факто для удалённого администрирования *nix-серверов.

В этой заметке я постараюсь кратко рассказать (скорее даже просто показать направление движения) об оптимизации работы с SSH с помощью использования bash-completion.

Итак. Все привыкли что если в приглашении bash набрать ssh и два раза нажать клавишу <TAB> - будет отображён список файлов в текущем каталоге. Однако было бы гораздо удобнее если бы вместо файлов в текущем каталоге перечислялись часто используемые хосты. Вот тут и пригодиться наличие возможности программировать автодополнение в bash.

Для программирования автодополнения используется команда complete. Об её использовании можно прочитать набрав команду:

help complete

Команда достаточно функциональна, но мы будем рассматривать самый простой случай. Поэтому нам достаточно ключа -W, который отвечает за список слов, используемых при автодополнении. Типичное использование complete выглядит так:

complete -W '<слово1> <слово2> <слово3>' <команда>

Теперь если набрать в терминале <команда> и два раза нажать <TAB> - будет показан список слов, перечисленных после ключа -W. Этим мы и воспользуемся. Выполним примерно вот такую команду:

complete -W 'host1.com host2.com user1@host3.com' ssh

Чтобы это команда выполнялась автоматически - её нужно поместить в файл ~/.bashrc. Например в моём ~/.bashrc команда вызывается примерно так (большую часть хостов я само собой пропустил:)):

complete -W 'nextrim.ru \
             ftp.nextrim.ru \
             post.hq.telecet.com \
             ghost.hq.telecet.com' ssh

Теперь особо ленивые админы могут ещё настроить авторизацию с помощью DSA-ключей, как это описано, например, здесь и работа превратится в удовольствие:)

Ссылки:

Ключевые слова: ssh, bash, bash_completion.

Комментарии:

Shlomo 2007-12-07 20:10:15 (#)

Вадим, ты просто энерджайзер!
Кстати, а почему телесетовские хосты? Ты же вроде в ТНПКО?

MooSE 2007-12-07 21:21:01 (#)

гыгы. за отличную службу меня забрали в лучший мир:) в телесет. работа чуть проще, зарплата чуть больше.

тнпко же собственность телесета и такие рокировки легко сейчас делаются. итак уже работаем как одна большая компания.

а про идеи - я давно плевался что не хватает дополнения хостов и собирался написать автодополнение. вот сегодня в обед минутка выдалась - сделал. реально удобнее работать стало:)

Shlomo 2007-12-08 10:04:24 (#)

И какие ОСи используют Казанские провайдеры?

MooSE 2007-12-08 12:27:02 (#)

quadrik, не ужели не в курсе?:)

На рабочих станциях преобладает Windows (не считая админов). А так - Linux и FreeBSD. В ТНПКО есть два сервера под Sun Solaris. Но вообще такого мало.

В основном всё же Linux и FreeBSD.:)

Shlomo 2007-12-08 18:24:34 (#)

А что конкретно и для чего?

MooSE 2007-12-08 20:38:07 (#)

ну солярка под бд биллинга. линухи - преимущественно красная шапка и клоны. тоже назначение - любой:) фряха она и в африке фряха. и тоже под самые разные цели. кроме пожалуй биллинга. ибо оракла на фряхе пока нет (в эмуляции линуха не всчёт), а биллинга если не всех, то почти всех операторов татарстана завязаны на оракл:)

shaplov 2007-12-11 17:48:51 (#)

Ну... вообще-то, как вяснилось, стандартный bash_completion вполне умеет работать с ssh
http://www.caliban.org/bash/index.shtml#completion_starting

Он умеет брать имена хостов и ~/.ssh/known_hosts
Единсвенное что нужно в /etc/ssh/ssh_config поставить
HashKnownHosts no
чтобы имена хостов не хранились в хешированном виде. И вперед!

Вот допилить бы его до состояния когда он берет имена из
~/.bash_history и /etc/hosts вот это было бы полезно.

MooSE 2007-12-11 22:11:32 (#)

Мне эта вещь не понравилась тем, что она не учитывает имён пользователей.

Просто я в этой жизни много куда логинился, но реально нужных мне хостов - штук десять-пятнадцать.

:)

mj 2008-03-17 16:04:06 (#)

Это ладно.
А zsh умеет делать дополнение имен _удаленных_ файлов при использовании scp и наличия ключика на удаленном хосте.
Новый комментарий



© 2006-2016 Вадим Калинников aka MooSE