我试图使用scp命令:
scp user@remotehost:/dir/to/\{file1,file2\} .
但是当我运行它时,它会提示输入密码,然后在不传输文件的情况下结束。如果我运行以下命令:(删除反斜杠 - 保持相同的用户,主机和文件名):
scp user@remotehost:/dir/to/{file1,file2} .
然后运行正常。好的,我的意思是它会为每个文件提示一次,但它会传输文件。
我还尝试重命名我的.bashrc
和.bash_profile
,以防这些配置文件中的某些内容导致问题。这是在尝试使用交互式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?):
https://unix.stackexchange.com/questions/123091/understand-debug-messages-from-sshd
http://www.openssh.com/specs.html
想法?
答案 0 :(得分:2)
scp user@remotehost:/dir/to/\{file1,file2\} .
仅当远程端评估能够进行大括号扩展的shell中的远程命令时才有效。客户发送:
debug1: Sending command: scp -v -f /dir/to/\{file1,file2\}
位于openssh
passed as an argument用户的默认shell中,即使没有scp
代码中的glob也可以使用。
在某些系统上无效的原因可能是shell
或不同的ssh
实施,可能无法通过用户shell
传递参数。
但您可以使用sftp
,例如:
sftp -b <(echo get /dir/to/{file1,file2} ) user@remotehost
这将以批处理模式运行sftp
,在您的客户端上执行大括号扩展并获取您感兴趣的所有文件。