Answers:
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
我也无法阻止主机哈希。
但是,您可以从中读取配置的条目~/.ssh/config
,这些条目不会被散列。这是Bash完成的脚本,该脚本从该文件读取条目:
_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
语法允许在一行上使用多个名称
为此,请将要完成的所有主机都放入/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
。