summaryrefslogtreecommitdiff
path: root/ssh-keygen-bash-completion.sh
diff options
context:
space:
mode:
Diffstat (limited to 'ssh-keygen-bash-completion.sh')
-rw-r--r--ssh-keygen-bash-completion.sh63
1 files changed, 63 insertions, 0 deletions
diff --git a/ssh-keygen-bash-completion.sh b/ssh-keygen-bash-completion.sh
new file mode 100644
index 0000000..f601174
--- /dev/null
+++ b/ssh-keygen-bash-completion.sh
@@ -0,0 +1,63 @@
+# ssh-keygen(1) completion -*- shell-script -*-
+
+_ssh_keygen()
+{
+ local cur prev words cword
+ _init_completion -n = || return
+
+ case $prev in
+ -*[abCIJjMNnrPSVWz])
+ return
+ ;;
+ -*E)
+ COMPREPLY=( $(compgen -W 'md5 sha256' -- "$cur") )
+ return
+ ;;
+ -*[FR])
+ # TODO: trim this down to actual entries in known hosts files
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ -*D)
+ _filedir so
+ return
+ ;;
+ -*[fGKsT])
+ _filedir
+ return
+ ;;
+ -*m)
+ COMPREPLY=( $(compgen -W 'PEM PKCS8 RFC4716' -- "$cur") )
+ return
+ ;;
+ -*O)
+ if [[ $cur != *=* ]]; then
+ COMPREPLY=( $(compgen -W 'clear force-command=
+ no-agent-forwarding no-port-forwarding no-pty no-user-rc
+ no-x11-forwarding permit-agent-forwarding
+ permit-port-forwarding permit-pty permit-user-rc
+ permit-x11-forwarding source-address=' -- "$cur") )
+ [[ $COMPREPLY == *= ]] && compopt -o nospace
+ fi
+ return
+ ;;
+ -*t)
+ local protocols=$(_xfunc ssh _ssh_query "$1" protocol-version)
+ local types='dsa ecdsa ed25519 rsa sm2'
+ if [[ $protocols == *1* ]]; then
+ types+=' rsa1'
+ fi
+ COMPREPLY=( $(compgen -W "$types" -- "$cur") )
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ local opts=$(_parse_usage "$1" "-?")
+ [[ -z "$opts" ]] && opts=$(_parse_help "$1" "-?") # OpenSSH < 7
+ COMPREPLY=( $(compgen -W "$opts" -- "$cur") )
+ fi
+} &&
+complete -F _ssh_keygen ssh-keygen
+
+# ex: filetype=sh