私はいつもssh
にいつもアクセスしているサーバーの大きなリストを持っています。ホスト名のリストを保持できるようにbash
またはzsh
を使用する方法はありますか。bashのオートコンプリートはファイル内を移動し、入力するたびにこれらの文字で始まるボックスの候補を表示しますホスト名の最初の数文字。
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 completion パッケージには、以下を含む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
に追加しても、ホストのハッシュを防ぐことができませんでした。
ただし、ハッシュされていない~/.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 !
これを機能させるには、完了させたいホストを/etc/hosts
ファイルに入れます。
bash-completion
パッケージも必要です(ファイル/ etc/bash_completionおよびディレクトリ/etc/bash_completion.dを含む)
〜/ .bashrc(. /etc/bash_completion
-/etc/bash.bashrcまたは〜/ .bashrcでコメント化されている場合があります)でソースを取得します。