我已经使用 SCP 一段时间了,我能够将文件从一个地方传输到另一个地方。一切都运行良好,直到我需要将文件从 Ubuntu 复制到用户名中有空格的 Windows 用户 (*呻吟*)
当我让它在 SSH 上工作时,像这样:
ssh "User Name Spaces"@192.168.0.42
它不适用于 SCP:
scp "myfile.txt" "User Name Spaces"@192.168.0.42:folder
返回时:
User Name Spaces: invalid user name
我尝试过各种各样的方法:
scp "myfile.txt" "User Name Spaces"@192.168.0.42:folder
scp "myfile.txt" "User\ Name\ Spaces"@192.168.0.42:folder
scp "myfile.txt" "User\\ Name\\ Spaces"@192.168.0.42:folder
scp "myfile.txt" "User\\\ Name\\\ Spaces"@192.168.0.42:folder
scp "myfile.txt" "'User Name Spaces'"@192.168.0.42:folder
scp "myfile.txt" "'User\ Name\ Spaces'"@192.168.0.42:folder
scp "myfile.txt" "'User\\ Name\\ Spaces'"@192.168.0.42:folder
scp "myfile.txt" "'User\\\ Name\\\ Spaces'"@192.168.0.42:folder
scp "myfile.txt" "'User Name Spaces'@192.168.0.42":folder
等等...但似乎没有什么效果
有人有什么想法吗?
答案1
你可以使用~/.ssh/config
。它是 SSH(以及基于 SSH 的命令,如scp
和sftp
)的每个用户配置文件。如果不存在,请创建它,并添加:
Host 192.168.0.42
User "User Name Spaces"
例如:
Host localhost
User "foo bar"
然后:
$ scp test.txt localhost:
foo bar@localhost's password:
(我实际上没有名为 的用户foo bar
,所以我无法完成测试。)
您还可以在以下位置创建别名.ssh/config
:
Host foo
Hostname 192.168.0.42
User "User Name Spaces"
然后你就可以方便地执行以下操作:
ssh foo
scp file foo:
无需输入完整的 IP 地址。
tar
另一种选择是,如果两端都有可用资源:
tar c myfile.txt | ssh "User Name Spaces"@192.168.0.42 tar x
tar
创建一个 tar 存档,保存到标准输出并通过管道传输到 SSH,在那里它成为 的输入tar x
,从而提取存档。您可以使用类似选项-C
来更改目录(或在tar
:之前以 shell 命令的形式执行此操作ssh … 'cd foo; tar x
)。您还可以使用压缩并节省一些网络带宽:
tar zc myfile.txt | ssh "User Name Spaces"@192.168.0.42 tar zx
答案2
我发现这个-o user=
选项更可靠。它适用于空格和撇号。如果用户名有点动态,则非常适合使用。
例如:
scp -o user="Your Username" ~/file remote:~/file
scp -o user="O'Neill" remote:~/file ~/file
scp -o user="${USERNAME_FROM_VARIABLE}" remote:~/file ~/file
来源:https://serverfault.com/questions/955058/scp-with-special-username