回答:
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
たコマンドを、含みます:
ssh
ssh-add
ssh-copy-id
sshfs
ここでソースを閲覧できます: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_config
Iホストハッシュを防ぐことができませんでした。
ただし、~/.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
。私はからの補完を使用しています。