Я хотел бы настроить завершение команды на Zsh для отображения имен хостов после ввода
ssh [TAB]
вынуть имена из моего файла .ssh / config (и желательно из известных_хостов и / etc / hosts и в любом другом месте, которое имеет смысл) и представить один список.
Это делает кое-что из этого в настоящее время, но
- он вообще не использует .ssh / config
- сначала требуется имя пользователя, хотя использование .ssh / config делает ненужным ввод имени пользователя
- он представляет несколько списков (возможно один из известных_хостов, а другой из / etc / hosts, но я этого не проверял)
Поэтому я хочу включить известные имена пользователей, а также известные имена хостов в (желательно один) список после ввода ssh [TAB]
(Я приеду сюда раньше Google, потому что 1) это приведет к тому, что ответ будет сохранен здесь, и 2) это, вероятно, более эффективно. Если никто не ответит, я найду ответ.)
ssh
shell
zsh
command-line-interface
иконоборец
источник
источник
Ответы:
Вот соответствующая часть из моего
.zshrc
. Он не изменился с 2002 года, поэтому я мог бы написать это по-другому сегодня, но он все еще работает, чтобы завершить имена хостов с~/.ssh/config
и~/.ssh/known_hosts
(еслиHashKnownHosts
выключен - он не существовал в те дни).источник
Функция, которая обеспечивает
ssh
завершение, находится в/usr/share/zsh/functions/Completion/Unix/_ssh
моей системе.Также смотрите
man zshcompsys
документацию (особенно выполните поиск по «host», который появляется в нескольких местах, и «ssh», который появляется в нескольких местах).Вполне возможно, что добавление
zstyle
команды к вашему~/.zshrc
будет делать то, что вы ищете, без необходимости изменять функцию завершения.источник
/usr/share/zsh/4.3.9/functions/_ssh
Mac OS X (адаптируйте версию)Я делаю это, используя список всех хостов в данном домене, используя dig. Вы можете заменить приведенную ниже функцию на любую поисковую систему, какую хотите, включая файл hosts или статический список:
Примечание. Приведенный выше код может не полностью заменить всю систему для команды ssh в вашей конфигурации. Если у вас есть проблемы с этим, попробуйте изменить команду "ssh" на другую произвольную команду, например "mycompletetest", и посмотрите, работает ли завершение для этого.
Также обратите внимание, что это делает передачу зоны DNS при каждом завершении! Если вы используете это часто или в довольно статичном домене, имеет смысл выполнить поиск и сохранить результат, тогда в вашей функции поиска просто установите reply = zone_result.
источник
dig axfr mydomain.com @ns1.mydomain.com
. Убедитесь, что вы можете запустить это вручную, и часть вывода должна быть списком хостов, зарегистрированных в этом домене, и их A или любых других записей. Это то, к чему я стремился, а затем отрезал только часть имени хоста, а не полную запись.Мне нравится хранить мой хэшированный
known_hosts
файл, и я бы не хотелHashKnownHosts
выключать его. Я обнаружил, что посев, который есть у @Gilles с тем, что уже есть в моей истории, достаточно эффективен для моих нужд.Кроме того, FWIW, это то, что я использовал для Bash:
источник