Функция Bash Auto-Completion SSHing в Различные Хосты

Я действительно рекомендую использовать grub2 и UUID здесь.

Можно получить UUID

ls -l /dev/disk/by-uuid
8
07.10.2012, 01:13
4 ответа

Zsh завершение работает с так называемыми закладками ssh. Это на конфигурации хоста в ~/.ssh/config.

Например,

  host baz
    hostname 192.168.1.2
    port 22
    user warrick

  host bar
    hostname example.com
    port 2200
    user kevin
    identityfile /home/warrick/.ssh/ec2.pem

man ssh_config видеть полный список опций.

Править

Я использую сценарий завершения от ohmyzsh:

https://raw.github.com/robbyrussell/oh-my-zsh/master/lib/completion.zsh

В подобном стиле к ohmyzsh, Я поместил вышеупомянутый сценарий в ~/.zsh/libs/completion.zsh и добавил это к ~/.zshrc.

# ~/.zshrc
for f in ~/.zsh/libs/*; do
  source $f
done
8
27.01.2020, 20:08
  • 1
    я не использую zsh, но удар... –  Gilles Quenot 06.10.2012, 00:12
  • 2
    Право, вопрос об операции в секунду для удара или zsh, мой комментарий к Вашему сообщению должен был просто способствовать ~/.ssh/config к/etc/hosts, если вообще возможный, который согласно его вопросу возможен при использовании zsh. –  kwarrick 06.10.2012, 00:17

Пакет завершения удара включает завершения для ssh команды, включая:

  • ssh
  • ssh-add
  • ssh-copy-id
  • sshfs

Можно просмотреть источник здесь: https://alioth.debian.org/scm/browser.php? group_id=100114

9
27.01.2020, 20:08

Чтобы это работало, поместил любые хосты, которые Вы хотите завершить в Вашем /etc/hosts файл.

Вам нужно также bash-completion пакет (содержащий файл/etc/bash_completion и каталог,/etc/bash_completion.d)

и источник это в ~/.bashrc (. /etc/bash_completion - иногда это комментируется в/etc/bash.bashrc или в ~/.bashrc).

0
27.01.2020, 20:08
  • 1
    я рекомендовал бы против использования/etc/hosts. Вместо этого добавьте так называемые закладки ssh в ~/.ssh/config. man ssh_config для получения дополнительной информации, но это - намного больше универсального разрешения Вам указать несколько псевдонимов, имени пользователя, порта, и очень намного больше. –  kwarrick 05.10.2012, 23:52
  • 2
    С archlinux, когда я вставил что-то /etc/ssh/ssh_config, У меня нет завершения, работающего на настроенные хосты. –  Gilles Quenot 05.10.2012, 23:56
  • 3
    См. мой расширенный ответ, я использую завершение от ohmyzsh. –  kwarrick 06.10.2012, 00:05
  • 4
    При рассмотрении источника Вы будете видеть, что сценарий проверяет known_hosts а также другие файлы конфигурации, например, ~/.ssh/config –  jasonwryan 06.10.2012, 00:21

скопирован из Мое собственный ответ на Unix.Se :

:

Если вы находитесь на хосте Ubuntu, то вы должны знать, что в Ubuntu записи в ~ / .ssh / sevaly_hosts хешированы , поэтому SSH завершение не может их прочитать. Это особенность, а не ошибка. Даже добавив hashknownhosts no на - ~ / .ssh / config и / etc / ssh / ssh_config Я не смог предотвратить хост хеширования.

Однако вы можете прочитать настроенные записи из ~ / .ssh / config , которые не хешированы. Вот скрипт для завершения Bash, который читает записи из этого файла:

_ssh() 
{
    local cur prev opts
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    opts=$(grep '^Host' ~/.ssh/config | awk '{print $2}')

    COMPREPLY=( $(compgen -W "$opts" -- ${cur}) )
    return 0
}
complete -F _ssh ssh

Положите этот скрипт в /etc/bash_completion.d/ssh , а затем источнив его со следующей командой:

$ . /etc/bash_completion.d/ssh

Я нашел Это руководство Invaluable, и я бы не смогли бы сценарию это без него. Спасибо Стива Кемп для написания этого потрясающего гида!

6
27.01.2020, 20:08

Теги

Похожие вопросы