Итак. Полгода назад на этом сайте была опубликована заметка «Оптимизация работы с SSH с помощью bash-completion». В ней говорилось об упрощении набора имён хостов, однако описанный там способ не свободен от недостатков, поскольку список хостов для автодополнения там определён достаточно жёстко и менять его не очень удобно.
Ниже предлагается более интересный способ, который позволяет брать имена хостов из файла ~/.ssh/known_hosts. Т.е. фактически при автодополнении будут показаны все хосты, на которые когда либо логинился пользователь.
По умолчанию в последних версиях OpenSSH имена хостов хэшируются. В нашем случае это будет мешать, и потому нужно отключить хэширование добавив строчку:
HashKnownHosts no
В файл ~/.ssh/ssh_config.
Далее удаляем (если есть) старую запись complete для ssh из ~/.bashrc и вместо неё добавляем следующую:
complete -W "`cat ~/.ssh/known_hosts | cut -d ' ' -f1 | cut -d ',' -f1 | cut -d ']' -f1 | sed 's/\[//' | sort`" ssh
Всё! Идея в том, что команда:
cat ~/.ssh/known_hosts | cut -d ' ' -f1 | cut -d ',' -f1 | cut -d ']' -f1 | sed 's/\[//' | sort
Парсит файл ~/.ssh/known_hosts, выбирая из него имена хостов.
Желаю приятной работы!:) |