Linux SCP不';t使用多文件括号扩展时传输文件

Linux SCP不';t使用多文件括号扩展时传输文件,linux,scp,Linux,Scp,我正在尝试使用scp命令: scp user@remotehost:/dir/to/\{file1,file2\} . 但当我运行这个程序时,它会提示输入密码,然后结束,而不传输文件。如果我运行以下命令:(删除反斜杠-保持相同的用户、主机和文件名): 然后它运行正常。好,我的意思是,它为每个文件提示一次,但它确实传输文件 我还尝试重命名我的.bashrc和.bash\u配置文件,以防这些配置文件中的某些内容导致问题。这是在尝试使用交互式shell测试之后 [[ $- == *i* ]] ||

我正在尝试使用scp命令:

scp user@remotehost:/dir/to/\{file1,file2\} . 
但当我运行这个程序时,它会提示输入密码,然后结束,而不传输文件。如果我运行以下命令:(删除反斜杠-保持相同的用户、主机和文件名):

然后它运行正常。好,我的意思是,它为每个文件提示一次,但它确实传输文件

我还尝试重命名我的
.bashrc
.bash\u配置文件
,以防这些配置文件中的某些内容导致问题。这是在尝试使用交互式shell测试之后

[[ $- == *i* ]] || return
这似乎引起了一些问题

我正在从我的OpenSuse 42.1工作站运行scp命令。但我也尝试过使用Redhat 6.3系统。我没有终端访问我试图从中获取文件的系统

如果我在同一工作站的另一台机器上运行该命令(使用斜杠-因此它只提示一次),那么它将按预期工作

---编辑1---
对有问题的系统使用-vvv选项会显示以下版本信息:

debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.6.1
debug1: Remote protocol version 2.0, remote software version SSHD
debug1: no match: SSHD
对工作的系统使用
-vvv
选项可显示以下内容:

debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.6.1
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH_5* compat 0x0c000000
我发现远程软件版本有明显的不同。但是,SSHD是真实版本还是可能被屏蔽/隐藏

---编辑2---
我发现这两个链接描述了不匹配的结果,并且它在与SSH协议版本2规范兼容的模式下运行。我只是不确定要查找什么文档或使用什么关键字(glob?):

想法

仅当远程端在支持支架扩展的shell中计算远程命令时,此选项才有效。客户端发送:

debug1: Sending command: scp -v -f /dir/to/\{file1,file2\}
它位于用户的默认shell的
openssh
中,这使得它即使在
scp
code中没有glob也能工作

to在某些系统上不起作用的原因可能是不同的
shell
或不同的
ssh
实现,这些实现可能不会将参数传递给用户
shell

但是您可以使用
sftp
,例如:

sftp -b <(echo get /dir/to/{file1,file2} ) user@remotehost

sftp-b只是一个旁注:退出代码0通常表示一切进展顺利。我知道这不是你的问题所在,但很高兴知道,除了退出代码0以外的任何东西都表明存在问题(至少在*nix系统上),谢谢。这就是我觉得奇怪的地方。这不是我的回声$?。这是使用scp-v时的退出代码。所以scp认为它工作得很好。虽然在描述问题的标题中使用可能不是一个好的选择(或者不是-嘿,我的命令正在工作!:D)。我可以/应该更改标题吗?我不认为这个头衔是我可以改变的。如果我可以/应该,那么我不确定什么是更好的描述。我想你可以通过点击问题下方的“编辑”按钮来更改标题。其他问题也是如此。当然,你是否愿意,完全取决于你自己。但是,如果这是我刚才尝试的实际问题,
\{file1,file2\}
{file1,file2}
{file1,file2}
{file2}
{file1,file2}
,以及
{file1,file2}
,这三种方法都对我有效(复制了两个文件)。所以这里可能存在配置或版本控制问题。当使用sftp-b时,我遇到了不同的问题(我认为与密码有关)。。。实际上,我有一些东西可以使用sftp,但是传输没有发送完整的文件。它似乎只转移了它的一部分,这就是为什么我尝试使用scp的原因。我理解客户机上的支架扩展与服务器上的支架扩展之间的区别。但是你说的听起来好像scp根本不支持扩展,这是不正确的,因为它可以对抗其他远程系统。如果我误解了或不理解某些内容,那么我将非常感谢您的解释。第二个命令在客户机上进行扩展,因此您不需要在服务器上进行扩展。来自
openssh
的标准
scp
不支持glob。您可以
grep glob scp.c
,但它不会返回任何结果。对于批处理模式下的
sftp
,最好使用无密码身份验证。因此您认为服务器/远程端可能正在使用openssh提供的不支持glob的标准scp?您是否知道如何验证这一点(可能通过scp调试)?添加
-vvv
开关将告诉您服务器和客户端的版本。将这两个详细日志发布到编辑的问题中。它将帮助您了解那里发生的事情,以及在远程端发出和运行的命令。
debug1: Sending command: scp -v -f /dir/to/\{file1,file2\}
sftp -b <(echo get /dir/to/{file1,file2} ) user@remotehost