是否可以为 SCP 远程文件提供制表符自动补全功能?

是否可以为 SCP 远程文件提供制表符自动补全功能?

给定主机 A / 用户 a 和主机 B / 用户 b,以及从 A 到 B 的 ssh:a@A$ ssh b@B。假设B中有一个文件名为hello.txt.众所周知,如果我登录 B 并查找该文件,我可以使用 tab 自动补全文件名:

a@A$ ssh b@B
b@B$ ls h
  hello.txt

在第二行的末尾我输入了“tab”。

现在假设我登录到A,并且想使用scphello.txt从B复制到A,但我不记得完整的文件名,我只记得该文件以“h”开头。我想要做

a@A$ scp b@B:h

然后按“tab”,然后查看 B 中以“h”开头的文件列表,就像上面的示例一样。这可能吗?

编辑:

以下是我按照 pLumo 建议的答案尝试执行的操作:

    $ ssh b@B
    Last login: xxx
    b@B:~$ ls
    my_file.dat
    b@B:~$ exit
    logout
    Shared connection to B closed.
    $ cat ~/.ssh/config
      Host B

          Hostname B.xxxx.xx

          User b


          ControlMaster auto    
           ControlPath ~/.ssh/control:%h:%p:%r

    $ scp b@B:my_file.dat .
    my_file.dat                                                                                                                                   100%    4     0.0KB/s   00:00  
    $ssh -fN b@B  
    $ scp b@B:my_ 

where at the end of the last line I pressed TAB, but nothing happens. 

答案1

scp如果您有以下情况之一,制表符补全效果很好:


第一个选项:

重用连接,将其添加到您的~/.ssh/config

Host B
    User b
    ControlMaster auto
    ControlPath ~/.ssh/control:%h:%p:%r

为了使选项卡完成功能正常工作,您需要已经打开一个连接。如果您还没有打开一个,您可以在后台启动一个:

ssh -fN B

这甚至可以通过JumpHost.


第二个选择:

使用公钥/私钥,scp将自动使用它们。缺点是,scp每次都需要登录,这可能比重用已建立的连接慢一些。

相关内容