使用scp时如何为远程路径启用自动补全功能?


37

我使用以下命令将文件远程复制到笔记本电脑中:

scp someFile USER@192.168.178.32:/home/USER/put/it/some/where/oh/damn/you/here

我希望能够通过点击选项卡来自动完成远程路径。


1
它已启用rsync,我认为它远远优于scp
Marco Ceppi 2012年

3
默认情况下,它已启用zsh
斯特凡希门尼斯

3
它也已启用scp,至少在这里有效。您需要一个已经添加到ssh-agent中的ssh-key。
enzotib 2012年

Answers:


24

确保已打开自动完成功能。在许多发行版中,这意味着您~/.bashrc需要包含. /etc/bash_completion

您需要设置无密码身份验证,即使用已加载的密钥ssh-agent

建立SSH连接的速度很慢,因此您可以通过一劳永逸地建立连接并随后使用该连接来大大加快完成速度。相对复杂的方法是ssh -N -M target-host在中设置了主从连接后,通过打开主SSH连接~/.ssh/config。有关说明,请参见单个命令中的多个ssh会话(您需要ControlMasterControlPath选项)。

一种简单的方法是通过SSHFS挂载远程文件系统,并cp与正常的shell完成一起使用。

mkdir ~/remote
sshfs USER@192.168.178.32:/home/USER ~/remote
cp -p someFile ~/remote/put/it/some/where/oh/damn/you/here

似乎有一些东西/etc/bash_completion要来源~/.bash_completion。我希望能够在无法写入/etc/且没有写入的远程服务器上具有此功能/etc/bash_completion(尽管有/etc/bash_completion.d/。是否存在可以从主目录安全运行的版本?至少有一个引用〜/ .bash_completion,所以我担心我会丢失更多的东西,并且可能存在周期性循环或其他可能导致错误的情况
redbmk 2012年


2

您可以切换到lftp而不是使用scp。它为您提供了一个很好的一致接口,用于通过ftp,sftp和ssh进行文件传输,包括您要查找的自动完成功能以及更多(即通配符)。

lftp鱼:// user @ machine

像上面使用scp一样,通过ssh打开连接。许多机器也支持sftp://,根据我的经验,它甚至更好。


0

就像@Giles 所说的那样,请确保已正确设置了自动完成程序,并在计算机上设置了ssh键。

将此配置添加到我的计算机上~/.ssh/config,在速度上产生了巨大的差异。

Host *
 ControlMaster auto
 ControlPath ~/.ssh/master-socket/%r@%h:%p
 ControlPersist 10s

这将为每个主机创建一个主连接。

持续10秒钟将使您有一些时间在自动关闭连接之前查看目录。

没有持久性,您将不得不重新创建连接,这将降低您的选项卡完成速度。

~$ scp mymachine:~/pa 标签

path/ palace/ pandas/ porn/

~$ scp mymachine:~/path/to 标签

~$ scp mymachine:~/path/to/file 标签

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.