SSH 从哪里提取自动完成功能?

use*_*278 9 bash ssh autocomplete

我在一个企业网络中,在 ssh 之后双击会导致它吐出计算机建议以 ssh 连接。但是,我注意到的是,根据我使用的计算机,会建议使用不同的计算机。删除.ssh/known_hosts不会改变行为。ssh 在哪里引入这些建议的计算机?

Jak*_*uje 12

OpenSSH 正在使用包中的 bash 完成bash-completion。负责的脚本存储在/usr/share/bash-completion/completions/ssh(在 Fedora 上。在不同的发行版上可能会有所不同)。该_known_hosts_real函数是在全局定义的/usr/share/bash-completion/bash_completion,您可以看到它正在使用以下所有内容(已知主机只是来源之一):

  • 已知主机:
    • 用户已知主机文件 ~/.ssh/known_hosts
    • 全球已知主机文件/etc/ssh/ssh_known_hosts, /etc/ssh/ssh_known_hosts2, /etc/known_hosts, /etc/known_hosts2...
  • 配置文件(host主要使用别名,但也使用Hostnames)
    • 用户配置文件~/.ssh/config~/.ssh2/config
    • 全局配置文件 /etc/ssh/ssh_config
    • 使用-F交换机提供的配置文件
    • 包含的配置文件
  • 在集群公钥中~/.ssh2/key_22_<hostname>.pub(我不知道为什么)
  • 主机报告 avahi-browse
  • 主机报告 ruptime
  • 正常主机名完成的结果

具体信息来源请查阅源代码。