Bash

SSH 從哪裡提取自動完成功能?

  • June 14, 2017

我在一個企業網路上,其中 ssh 之後的雙標籤會導致它吐出要 ssh 到的電腦的建議。但是,我注意到的是,根據我使用的電腦,會建議使用不同的電腦集。刪除.ssh/known_hosts不會改變行為。ssh 在哪里拉入這些建議的電腦?

OpenSSH 使用來自 package 的 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

  • 正常主機名完成的結果

具體資訊來源請參考源碼。

引用自:https://unix.stackexchange.com/questions/370980