У меня настроено несколько серверов ~/.ssh/config
, таких как alpha
и beta
. Как я могу настроить Bash таким образом, чтобы команды ssh al<tab>
и scp file.tgz al<tab>
автозаполнять имена настроенных серверов?
Я не хочу добавлять серверы в другой файл (например, массив Bash) каждый раз, когда он добавляется, поскольку мы регулярно добавляем и удаляем серверы, и этот список довольно большой.
bash
ssh
autocomplete
scp
dotancohen
источник
источник
bash-completion
установил.Ответы:
Нашел это !!
Кажется, что в Ubuntu записи в
~/.ssh/known_hosts
хэше хэшируются , поэтому SSH-завершение не может их прочитать. Это особенность, а не ошибка. Даже добавивHashKnownHosts no
к~/.ssh/config
и/etc/ssh/ssh_config
я не смог предотвратить хозяина хэширования.Тем не менее, хосты, которые меня интересуют, также находятся в
~/.ssh/config
. Вот скрипт для Bash Completion, который читает записи из этого файла:Поместите этот скрипт,
/etc/bash_completion.d/ssh
а затем отправьте его с помощью следующей команды:Я нашел это руководство бесценным, и я бы не смог написать это без него. Спасибо Стиву Кемпу за написание этого потрясающего руководства!
источник
/etc/hosts
других дистрибутивах.Предварительно упакованные
Вы не говорите, какой дистрибутив вы используете, но в моей системе Fedora 19 у меня установлен следующий пакет,
bash-completion
который предоставляет эту функцию через этот файл правил завершения:Вот пакет, который я установил:
Если вы просмотрите этот файл правил, вы увидите разделы, которые опрашивают
$HOME/.ssh/config
файл:Роллинг свой собственный
Я также нашел этот Gist, known_hosts_autocomplete.sh , который делает нечто подобное, кроме
$HOME/.ssh/known_hosts
файла.Вы можете сделать что-то подобное, используя свой
$HOME/.ssh/config
файл, если по какой-то причине вы не можете найти файл правила завершения дляssh
уже предварительно упакованного.источник
/usr/share/bash-completion/completions/ssh
. Не могли бы вы опубликовать весь этот файл где-нибудь, чтобы я мог скопировать его? Спасибо!/usr/share/bash-completion/completions/ssh
не помогает! Также не выполняетсяcomplete -W ...
команда из командной строки Bash. В чем может быть проблема здесь?ssh
илиscp
.Я обнаружил, что автозаполнение не работает, потому что Ubuntu хеширует известные хосты. Можете добавить
К вашему
.ssh/config
файлу, но существующие хосты не будут хэшированы.источник
~/.ssh/config
и изменил ее/etc/ssh/ssh_config
, и я удалил~/.ssh/known_hosts
файл. После повторного входа на серверы имена хостов все еще сохраняются в хэше..ssh/config
файлов уже будет эта строка. Дай мне знать, если это работает.Чтобы включить автозаполнение ssh в Debian и Ubuntu:
Обратите внимание, что это не имеет ничего общего с хэшированием known_hosts, в отличие от того, что было сказано выше и исходного вопроса. Если вы хотите выполнить автозаполнение с known_hosts, то, конечно, вам придется отключить хеширование, но это настоятельно рекомендуется.
Например, у меня есть:
в моем .ssh / config, и у меня все еще есть автоматическое завершение ssh, работающее с хостами, перечисленными в .ssh / config и / etc / hosts. Вам нужно добавить хост в .ssh / config, как указано в OP:
Host my-awesome-host Имя хоста the.real.host.name
(Или вы можете добавить запись хоста в / etc / hosts, который является другим источником для сценариев Debian / Ubuntu.)
Затем вы можете просто напечатать,
ssh my-awe<tab>
и это будет автоматически завершено. Опять же, это даже если вы HashKnownHosts, что настоятельно рекомендуется. (Обратите внимание, что завершение bash должно быть включено в вашей оболочке bash, и вам необходимо специально установить эти сценарии, как указано выше для вашего дистрибутива.)Затем добавьте эти строки в свой,
.bashrc
чтобы включить его (требуется выйти из системы и снова войти в систему, или простоbash
ввести новый текст для запуска новой оболочки. (Вам не нужно включать, если он уже включен/etc/bash.bashrc
и/etc/profile
источники/etc/bash.bashrc
).Это включит автозаполнение ssh (среди прочего!) Из
~/.ssh/config
,/etc/hosts
и т. Д.Обратите внимание, что в Debian по умолчанию используется ash вместо bash. Вы можете легко перейти на bash:
(Вам нужно выйти и снова войти, чтобы это вступило в силу.)
источник
В Ubuntu 14.04
ssh
серверы автозаполнения, упомянутые в вашем~/.ssh/config
Я заметил это, когда понял, что только один из серверов, к которым я обычно обращаюсь, автоматически заполняется. Единственная разница между ними заключалась в записи в файле конфигурации ssh, которая была связана с аутентификацией. Когда я добавил новую запись в файл конфигурации для другого сервера, он также начал автозаполнение.
Вот запись для тех, кто спрашивал:
Я был бы очень удивлен, если бы это имело значение, что вы указали в конфиге (если, конечно, он все еще действует).
источник