给定主机 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
每次都需要登录,这可能比重用已建立的连接慢一些。