在 SCP 中转义用户名空格

在 SCP 中转义用户名空格

我已经使用 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 的命令,如scpsftp)的每个用户配置文件。如果不存在,请创建它,并添加:

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

相关内容