我在服务器上有以下文件:
A_Hello.txt
B_Hello.txt
C_Hello.txt
A_World.txt
B_World.txt
C_World.txt
A_SU.txt
B_SU.txt
C_SU.txt
A_IDONTWANTTHISFILE.txt
如果我尝试下载所需的文件(除最后一个之外的所有文件):
scp 我@服务器:/path/to/*_{Hello,World,SU}.txt
每次转换花括号内的单词时,系统都会要求我输入密码,因此:
- 我执行命令并输入我的服务器密码
- 前 3 个文件被下载
- 我被要求输入密码
- 接下来下载 3 个文件
- 我被要求输入密码...等等
这是什么原因造成的?我该如何消除?
答案1
原因是什么
bash 扩展就是答案。您的命令
scp me@server:/path/to/*_{Hello,World,SU}.txt
扩展为
scp me@server:/path/to/*_Hello.txt me@server:/path/to/*_World.txt me@server:/path/to/*_SU.txt
在您的 中bash
,这意味着您向同一台服务器发出三个单独的连接。
我怎样才能摆脱它?
这个要看情况。还有很多可能性。
设置 ControlMaster 以便您可以通过同一连接发出所有命令:
创造
~/.ssh/config
Host server ControlPath ~/.ssh/%r@%h:%p ControlMaster auto ControlPersist 5m
然后运行你最喜欢的命令:
scp me@server:/path/to/*_{Hello,World,SU}.txt
与批处理文件一起使用
sftp
,在更复杂的情况下提供更大的灵活性:sftp -b <( echo get /path/to/*_{Hello,World,SU}.txt ) me@server