我使用授权密钥登录远程 ubuntu 服务器。我需要scp
经常使用 cp 将文件从本地计算机复制到远程计算机。我想像在本地计算机上一样通过 启用自动完成功能bash-autocompletion
。
我怎能这样做?
更新
我试过zsh
(https://github.com/robbyrussell/oh-my-zsh),scp
自动完成功能运行良好。我该如何使用我的 来实现这一点bash
?
答案1
据我所知,Ubuntu 和 Debian 的软件包bash-completion
恰好具备您所要求的功能。但是,如果远程服务器实施了阻止入侵尝试的方案(例如,通过限制给定时间间隔内的连接数并在客户端超过该间隔时进行阻止),您将遇到问题。
检查/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
。
需要注意的是:如果远程主机在登录时输出了多余的内容,自动完成功能就会中断。解决这个问题的一种方法可能是(但我发现这种方法并不适用于所有地方)在远程机器上不输出任何内容的情况下退出:
[ -z "$SSH_TTY" ] && exit
... 即不显示横幅等。您可以在/etc/sshd/sshrc
远程框中或正在执行的任何脚本的顶部(hashbang 下方)包含此行,以显示指纹的 ASCII 艺术形式。请注意,上面的行是 bourne-shell 语法,请根据需要进行调整。它检查SSH_TTY
环境变量是否为空,如果是,则以退出代码 0 退出。
答案2
我想不是,因为在您执行 SCP 时实际按下回车键并进行身份验证之前,您无权访问远程文件系统。
仅当成功登录到远程服务器后或在本地登录的情况下加载提供 bash-completion 脚本的 bash 配置文件后,bash-autocompletion 才会启动。
您可能需要研究一下在本地挂载远程文件系统的 sshfs,然后就可以对其进行自动完成。