我经常使用 SCP 在服务器之间移动文件,并且我听说如果您使用公钥则可以在远程服务器上使用制表符补全,但到目前为止我还没有运气。
我想要实现的目标如下:
scp -r remote.ip.address:/remote/dir/folder<TAB> /local/destiation/
远程服务器ls
上将/dir/
显示 3 个文件夹:
/remote/dir/folder_1
/remote/dir/folder_2
/remote/dir/folder_3
我希望 SCP 能够显示哪些文件夹匹配(如果有),就像在本地文件系统中导航时使用普通路径补全一样。Tab 补全在命令行中对本地路径有效scp
,但我注意到,当远程计算机的路径与本地路径匹配时(即:“~/”),它会从本地文件系统而不是远程文件系统完成/建议文件/文件夹。
运行以下命令可实现无密码登录:
`ssh remote.ip.address`
...所以我知道按键设置正确。有什么办法可以让它正常工作吗?
答案1
您使用的是哪种 shell?如果您使用的是 bash,则可能需要在 bash 中启用“高级”补全功能...
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
在你的 ~/.bashrc 中
在 OSX 上你可以执行以下操作:
$ sudo port install bash-completion
在你的 ~/.profile 中添加:
if [ -f /opt/local/etc/bash_completion ]; then
. /opt/local/etc/bash_completion
fi
答案2
如果有人想用 rkthkr 的方法在 Mac OSX Mountain Lion 上执行此操作,他们必须安装 Mac Ports (http://www.macports.org/install.php)首先,运行他提到的命令:
$ sudo port install bash-completion
然后按照此处的说明配置他们的终端应用程序:https://trac.macports.org/wiki/howto/bash-completion
答案3
另一个可能更简单的解决方案是使用SSHFS。
这是一个基于 SSH 文件传输协议的文件系统客户端。由于大多数 SSH 服务器已经支持此协议,因此设置起来非常容易:即在服务器端无需执行任何操作。在客户端,安装文件系统就像使用 ssh 登录服务器一样简单。
它是保险丝基于文件系统的远程文件夹与本地文件夹相链接。在底层使用 scp,但您可以cp
像在本地机器上复制文件一样操作该命令。因此,tab 补全自动工作!SSHFS适用于大多数发行版,例如 do sudo apt-get install sshfs
(这也会加载fuse
内核模块)
像这样开始:
$ sudo mkdir /mnt/server1
$ sudo chown local-username /mnt/server1
$ sshfs [email protected]:/home/remote-username /mnt/server1
$ ls /mnt/server1
.. <bunch of files> ...
$ cp /mnt/server1/.bash<tab><tab>
.bash_history .bash_logout .bashrc
$ cp /mnt/server1/.bashrc .
答案4
我强烈建议使用雅富。
它支持文件名完成,并且还具有一些其他有用的功能(例如递归 get/put/fxp/ls/rm)