pra*_*tri 8 bash ssh zsh autocomplete
我有一大堆服务器,通常我ssh一直都在使用。有什么方法可以使用bashorzsh来保留主机名列表,bash 自动完成功能会遍历文件,并在我键入主机名的前几个字母时为我提供以这些字母开头的框的建议。
的bash补包包括用于完井ssh指令,包括:
sshssh-addssh-copy-idsshfs你可以在这里浏览源代码:https : //alioth.debian.org/scm/browser.php?group_id=100114
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
如果您在 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
Run Code Online (Sandbox Code Playgroud)
放入该脚本,/etc/bash_completion.d/ssh然后使用以下命令获取它:
$ . /etc/bash_completion.d/ssh
Run Code Online (Sandbox Code Playgroud)
我发现本指南非常宝贵,没有它我就无法编写脚本。感谢Steve Kemp编写了那本了不起的指南!
| 归档时间: |
|
| 查看次数: |
10560 次 |
| 最近记录: |