linux中给ssh命令加上自动完成功能

作者:简简单单 2014-04-02

于是我回归到了使用Linux的命令行终端,通过创建多个alias来满足不同的ssh参数的情况,比如有的需要用key,有的需要用密码;再将所有的服务器添加到某个文本文件中以列表的方式进行更新,同时将其内容作为这些alias的自动完成列表,用起来感觉非常不错。

具体配置:
定义alias

 代码如下 复制代码

[dong.guo@heydevops ~]$ vim .bashrc

alias sshads='ssh -t -i /home/dong.guo/workspace/sshkeys/key_adsymp -l adsymp'
alias sshrootdraw='sshpass -p "drawbridge" ssh -l root'
alias sshrootkey='ssh -t -i /home/dong.guo/workspace/sshkeys/key_root -l root'
创建服务器列表文件,输入所有的服务器主机名
[dong.guo@heydevops ~]$ head -n 10 /home/dong.guo/workspace/autocomp/servers.list

 
api1e
api2e
api3e
c1e
c2e
c3e
c4e
c5e
cb1e
cb2e

给创建的alias加上自动完成功能 www.111com.net

 代码如下 复制代码

[dong.guo@heydevops ~]$ vim .bashrc

# Enable auto-completion of servers via sshads, sshrootdraw and sshrootkey
function _servers() {
  COMPREPLY=()
  local cur=${COMP_WORDS[COMP_CWORD]};
  local com=${COMP_WORDS[COMP_CWORD-1]};
  case $com in
    'sshads')
      local servers=($(cat /home/dong.guo/workspace/autocomp/servers.list))
      COMPREPLY=($(compgen -W '${servers[@]}' -- $cur))
      ;;
    'sshrootdraw')
      local servers=($(cat /home/dong.guo/workspace/autocomp/servers.list))
      COMPREPLY=($(compgen -W '${servers[@]}' -- $cur))
      ;;
    'sshrootkey')
      local servers=($(cat /home/dong.guo/workspace/autocomp/servers.list))
      COMPREPLY=($(compgen -W '${servers[@]}' -- $cur))
      ;;
  esac
}

complete -F _servers sshads
complete -F _servers sshrootdraw
complete -F _servers sshrootkey
使配置生效
[dong.guo@heydevops ~]$ source .bashrc

优雅的敲下TAB键来体验自动完成所带来的快感,

相关文章

精彩推荐