我使用授权密钥login到我的远程Ubuntu服务器。 我需要经常使用scp从我的本地机器到我的远程机器的cp文件。 我想通过bash-autocompletion来启用自动完成,就像我在本地机器上所做的一样。
我怎么能这样做?
我试过zsh ( https://github.com/robbyrussell/oh-my-zsh ), scp可以自动完成。 我怎么能用我的bash呢?
根据我的知识,Ubuntu和Debian带来了bash-completion软件包的function。 但是,如果远程服务器有一个scheme来阻止破解尝试(例如通过限制给定时间间隔内的连接数量并阻止客户端超过它),您将遇到问题。
在你的系统上检查/etc/bash_completion和/etc/bash_completion.d/ssh 。 如果不存在,请确保apt-get install bash-completion 。 一旦完成,请确保您的.bashrc或.profile加载该全局自动完成文件。
这通常会自动完成$HOME/.ssh/known_hosts ( grep _known_hosts_real /etc/bash_completion )中的远程主机名和scp上远程文件夹的自动完成function。
需要注意的一点是:如果远程主机在login时输出额外的东西,自动完成往往会中断。 解决这个问题的一种方法是(但是我发现这不能在任何地方工作)在远程机器上没有任何输出的情况下解救出来:
[ -z "$SSH_TTY" ] && exit
即不显示横幅等。 您可以在远程框的/etc/sshd/sshrc中或在您执行的任何脚本的顶部(下面的hashbang)中包含此行,以显示指纹的ASCII艺术forms。 请注意,上面的行是bourne-shell语法,需要调整它。 它检查是否SSH_TTY 。 variables是空的,如果是退出代码0。
我猜是不行,因为直到你实际上在进入SCP并进行身份validation时,才能访问远程文件系统。
只有在成功login到远程服务器之后,或者在本地login的情况下,加载了bashconfiguration文件,bash-autocompletion才会启动bash-completion脚本。
你可能想看看在本地安装远程文件系统的sshfs,然后你可以自动完成。