いつからか、SSHの自動補完がされなくなったので対応した

環境

  • Debian 10
  • Bash
  • bash_completion

調べた

Bug #42382 “bash completion does not work for ssh” : Bugs : bash package : Ubuntu

known_hostsが暗号化されるようになった?らしいけど、この記事はUbuntuだし2006年の記事なので、これが原因なのかよくわからない

対処方法

How To Autocomplete SSH Hosts - DEV

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// ファイルを作成
$ cat /etc/bash_completion.d/ssh

_ssh()
{
local cur prev opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
opts=$(grep '^Host' ~/.ssh/config ~/.ssh/*.config 2>/dev/null | grep -v '[?*]' | cut -d ' ' -f 2-)

COMPREPLY=( $(compgen -W "$opts" -- ${cur}) )
return 0
}
complete -F _ssh ssh

grep行(grep '^Host' ~/.ssh/config ~/.ssh/*.configの部分)は、各自の環境にあわせて変更。自分の場合は、 .ssh/configの他に、 service1.config, service2.configみたいに、サービス毎に .configを分けてたので上記のように書いています

その後、.bash_profile等で上記スクリプトを読み込みます

1
2
// .bash_profileに追記
. /etc/bash_completion.d/ssh

以上です