Завершение вкладки zsh для ssh с использованием IP-адреса

Я подключился по ssh к нескольким машинам, которые являются просто IP-адресами, однако некоторое время назад я заметил, что завершение вкладки перестало работать при попытке подключиться к ним по SSH. Я использую zsh, и я могу заполнить обычное доменное имя с помощью ssh, но все IP-машины, которые я использую, больше не работают, здесь что-то сломалось? или в чем дело?

  • OS X - 10.9.3
  • zsh - 5.0.2

person Mentch    schedule 26.06.2014    source источник
comment
Как выглядит первый столбец (до первого пробела; awk '{print $1}' ~/.ssh/known_hosts) вашего ~/.ssh/known_hosts? Существуют ли имена хостов и IP-адреса (и, возможно, их списки, разделенные запятыми), или у вас есть только хэши (возможно, начинающиеся с |1|)?   -  person Adaephon    schedule 30.06.2014
comment
У меня есть список имен хостов и IP-адресов. Никаких хешей. Единственный нечетный - [localhost]: 2224   -  person Mentch    schedule 01.07.2014
comment
Нечетная - обозначение нестандартных портов (2224 вместо 22). Он не должен нести ответственности за эту проблему, у меня они тоже есть. Чтобы исключить проблемы с known_hosts, вы можете попробовать удалить все записи, кроме одной, и посмотреть, сохраняется ли такое поведение. (Не забудьте заранее сделать резервную копию :-))   -  person Adaephon    schedule 01.07.2014


Ответы (2)


вы установили стиль use-ip?
zstyle ':completion:*' use-ip true
в документации сказано, что ip-адреса по умолчанию удаляются из баз данных хоста. use-ip позволяет их завершить.
http://zsh.sourceforge.net/Doc/Release/Completion-System.html#index-use_002dip_002c-completion-style

person jens stein    schedule 13.10.2014

Ваш ssh может хешировать записи на known_hosts?

Лучшее решение для удобства использования в целом для ssh IMO - это создать псевдонимы хоста ssh, а затем просто использовать псевдоним в командной строке. Например. добавить что-то подобное к себе ~/.ssh/config

Host foo
  # HostName also accepts numeric IP addresses
  HostName XXX.ZZZ.YYY.BBB

тогда вы просто используете scp backup.tar foo:

Проверьте man ssh_config для получения дополнительной информации. Из руководства:

 HashKnownHosts
         Indicates that ssh(1) should hash host names and addresses when they are added to ~/.ssh/known_hosts.  These hashed names
         may be used normally by ssh(1) and sshd(8), but they do not reveal identifying information should the file's contents be
         disclosed.  The default is “no”.  Note that existing names and addresses in known hosts files will not be converted auto‐
         matically, but may be manually hashed using ssh-keygen(1).  Use of this option may break facilities such as tab-comple‐
         tion that rely on being able to read unhashed host names from ~/.ssh/known_hosts.

Хорошо, игнорируйте вышесказанное, я вижу в комментарии, что это не так, но оставлю его здесь для справки.

PS: вы всегда можете вручную настроить хосты, которые должны быть завершены zsh, используя что-то вроде:

hosts=(foo.bar.com faa.bar.com fee.bar.com)
zstyle ':completion:*:hosts' hosts $hosts

Или сделайте более сложную версию, например, описанную здесь https://www.maze.io/2008/08/03/remote-tabcompletion-using-openssh-and-zsh/index.html

person Francisco    schedule 27.06.2014
comment
Это как бы решает мою проблему, создав ярлык для SSH для IP. Но это не решает проблему, почему только IP-адреса не заполняются для ssh, а обычные доменные имена делают. - person Mentch; 27.06.2014
comment
Вы проверяли, шифрует ли SSH записи в known_hosts? - person Francisco; 02.07.2014
comment
@Mentch, хорошо, я видел в комментариях к вопросу, что у вас known_hosts не хешируется. Вы используете oh-my-zsh? (частый источник подобных проблем). Обратите внимание, что oh-my-zsh имеет функцию удаления кода с IP-завершением для ssh. - person Francisco; 03.07.2014
comment
Да, я использую oh-my-zsh - person Mentch; 03.07.2014