Bash
SSH 和 SCP 的自動完成伺服器名稱
我在 中配置了一些伺服器
~/.ssh/config
,例如alpha
和beta
。如何配置 Bash 以使命令和自動完成已配置伺服器的名稱?$ ssh al
Tab```$ scp file.tgz al`Tab``我不想每次添加伺服器時都將伺服器添加到另一個文件(即 Bash 數組),因為我們會定期添加和刪除伺服器,而且列表非常大。
這是在 Kubuntu 12.10 上,我確實安裝了bash-completion。
找到了!!
似乎在 Ubuntu中的條目
~/.ssh/known_hosts
是 hashed,因此 SSH 完成無法讀取它們。這是一個功能,而不是一個錯誤。即使通過添加HashKnownHosts no
,我~/.ssh/config
也/etc/ssh/ssh_config
無法阻止主機散列。但是,我感興趣的主機也可以在
~/.ssh/config
. 這是 Bash Completion 的腳本,它從該文件中讀取條目:_ssh() { local cur prev opts COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" opts=$(grep '^Host' ~/.ssh/config ~/.ssh/config.d/* 2>/dev/null | grep -v '[?*]' | cut -d ' ' -f 2-) COMPREPLY=( $(compgen -W "$opts" -- ${cur}) ) return 0 } complete -F _ssh ssh
將該腳本放入
/etc/bash_completion.d/ssh
,然後使用以下命令獲取它:$ . /etc/bash_completion.d/ssh
我發現本指南非常寶貴,如果沒有它,我將無法編寫此指南。感謝Steve Kemp寫了這麼棒的指南!