4

我 ssh 到几台只是 IP 地址的机器,但是我注意到不久前,当尝试 SSH 到它们时,选项卡完成停止工作。我使用 zsh,我可以使用 ssh 完成一个常规域名,但是我使用的所有 IP 机器都不再完成 tab,这里有什么问题吗?还是怎么了?

  • OS X - 10.9.3
  • zsh - 5.0.2
4

2 回答 2

3

你设置了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

于 2014-10-13T20:44:40.907 回答
2

您的 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

于 2014-06-27T08:27:45.073 回答