Итак. Полгода назад на этом сайте была опубликована заметка «Оптимизация работы с 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, выбирая из него имена хостов.
Желаю приятной работы!:)
answer 2008-05-05 12:52:48 (#)
cat ~/.ssh/known_hosts | cut -f1 -d " " | sort
И хватит.
А вот вырезать [] я бы не рекомендовал, т.к. Вы сами потом через месяц не вспомните на какой порт удаленной машины вы соединялись. При малом кол-ве машин упомнить можно, но если как у меня:
answer@cyber:/home/answer>cat ~/.ssh/known_hosts | wc -l
891