一部のサーバーを構成しました。~/.ssh/config
、alpha
のようなbeta
。構成されたサーバーの名前をコマンドし、オートコンプリートするようにBashをどのように構成しますか?$ ssh alTab
$ scp file.tgz alTab
サーバーを追加したくありません。その他サーバーを定期的に追加および削除し、リストがかなり大きいため、一度に1つのファイル(Bash配列など)が追加されます。
これはKubuntu 12.10にあり、私は持っていますバッシュ完了インストールする。
答え1
それを発見! !
Ubuntuの下にあるようですのエントリがハッシュされ~/.ssh/known_hosts
ました。そのため、SSH完了では読み取れません。これはバグではなく機能です。を追加してもホストハッシュを防ぐことはできHashKnownHosts no
ません。~/.ssh/config
/etc/ssh/ssh_config
ところで、私が興味を持っているホストはでも見つかります~/.ssh/config
。以下は、このファイルからエントリを読み取るBash完了スクリプトです。
_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
私が見つけたこのガイド(Archive.orgのコピー)は非常に貴重であり、それなしではこのスクリプトを書くことはできません。ありがとうスティーブ・ケンプ素晴らしいガイドを書いてくれてありがとう!
答え2
事前梱包
どのディストリビューションを使用しているかはわかりませんでしたが、私のFedora 19システムには、bash-completion
このコンプリートルールファイルを介してこの機能を提供する次のパッケージがインストールされています。
/usr/share/bash-completion/completions/ssh
私がインストールしたパッケージは次のとおりです。
$ rpm -aq |grep completion
bash-completion-2.1-2.fc19.noarch
ルールファイルを見ると、$HOME/.ssh/config
ファイルについて尋ねるセクションが表示されます。
$ grep config /usr/share/bash-completion/completions/ssh
local configfile
local -a config
# Search COMP_WORDS for '-F configfile' or '-Fconfigfile' argument
configfile="$(dequote "${1:2}")"
[[ $1 ]] && configfile="$(dequote "$1")"
_known_hosts_real -a -F "$configfile" "$cur"
local configfile
# Search COMP_WORDS for '-F configfile' argument
configfile="$(dequote "${1:2}")"
[[ $1 ]] && configfile="$(dequote "$1")"
_known_hosts_real -a -F "$configfile" "$cur"
local configfile prefix
# Search COMP_WORDS for '-F configfile' or '-Fconfigfile' argument
configfile="$(dequote "${1:2}")"
[[ $1 ]] && configfile="$(dequote "$1")"
_known_hosts_real -c -a -F "$configfile" "$cur"
自分を転がしてください。
私もこのポイントを見つけました。Known_hosts_autocomplete.sh、$HOME/.ssh/known_hosts
ファイルを除いて同様の操作を行います。
# add to ~/.bash_profile, and close/reopen a shell. Will autocomplete any
# hosts found in known_hosts.
complete -W "$(echo `cat ~/.ssh/known_hosts | cut -f 1 -d ' ' | \
sed -e s/,.*//g | uniq | grep -v "\["`;)" ssh
$HOME/.ssh/config
何らかの理由でssh
事前パッケージ化された完了ルールファイルが見つからない場合は、同様の操作を実行できます。
答え3
Ubuntuが既知のホストをハッシュするため、オートコンプリートが機能しないことがわかりました。追加できます
Host *
HashKnownHosts no
ファイルに保存され.ssh/config
ますが、既存のホストはハッシュされません。
答え4
Ubuntu 14.04では、ssh
前述のサーバーを自動補完します。~/.ssh/config
私が定期的に訪問しているサーバーの1つだけが自動的に実行されていることに気づいたとき、私はこれを実現しました。 2 つの唯一の違いは、SSH 構成ファイルの認証関連項目です。また、他のサーバーの構成ファイルに新しいエントリを追加すると、自動的に完了し始めました。
質問された方のための項目は次のとおりです。
HOST server-name
GSSAPIAuthentication=no
構成で指定した内容が重要であれば(もちろんまだ有効な限り)、非常に驚くでしょう。