回答:
Zsh補完は、いわゆるsshブックマークで機能します。これらは、のホスト構成ごとです~/.ssh/config。
例えば、
host baz
hostname 192.168.1.2
port 22
user warrick
host bar
hostname example.com
port 2200
user kevin
identityfile /home/warrick/.ssh/ec2.pem
man ssh_config オプションの完全なリストを表示します。
編集
私はohmyzshの完了スクリプトを使用しています:
https://raw.github.com/robbyrussell/oh-my-zsh/master/lib/completion.zsh
と同様のスタイルでohmyzsh、上のスクリプトをに配置して~/.zsh/libs/completion.zshこれをに追加しました~/.zshrc。
# ~/.zshrc
for f in ~/.zsh/libs/*; do
source $f
done
bashの補完パッケージはのための補完含まれsshたコマンドを、含みます:
sshssh-addssh-copy-idsshfsここでソースを閲覧できます:https : //alioth.debian.org/scm/browser.php?group_id=100114
unix.SEに関する自分の回答からコピー:
Ubuntuホストを使用している場合は、Ubuntuではのエントリ~/.ssh/known_hostsがハッシュ化されているため、SSH完了でエントリを読み取ることができないことを知っておく必要があります。これはバグではなく機能です。でも追加することによって、HashKnownHosts noに~/.ssh/configし、/etc/ssh/ssh_configIホストハッシュを防ぐことができませんでした。
ただし、~/.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 | awk '{print $2}')
COMPREPLY=( $(compgen -W "$opts" -- ${cur}) )
return 0
}
complete -F _ssh ssh
そのスクリプトを配置/etc/bash_completion.d/sshし、次のコマンドを使用してソースを指定します。
$ . /etc/bash_completion.d/ssh
私が見つかりました。このガイドは、非常に貴重な、私はこのそれなしでスクリプトにできなかったでしょう。その素晴らしいガイドを書いてくれたSteve Kempに感謝します!
opts=$(grep '^Host' ~/.ssh/config | sed 's@^Host @@')ので、~/.ssh/config構文は1行に複数の名前が可能になります
これを機能させるには、完了させたいホストを/etc/hostsファイルに入れます。
bash-completionパッケージも必要です(ファイル/ etc / bash_completionおよびディレクトリ/etc/bash_completion.dを含む)
そして、それを〜/ .bashrcにソースします(. /etc/bash_completion- / etc/bash.bashrcまたは〜/ .bashrcでコメントアウトされている場合があります)。
man ssh_config詳細については、これははるかに用途が広いため、複数のエイリアス、ユーザー名、ポートなどを指定できます。
/etc/ssh/ssh_config、構成されたホストに対して完全に機能しません。
ohmyzsh。私はからの補完を使用しています。