【问题标题】:scp is giving no such file or directoryscp 没有给出这样的文件或目录
【发布时间】:2018-04-30 06:18:38
【问题描述】:

我在这个容器中的Linux如下图:

root@sbolla-6c7b7589d8-5c2rb:/usr/safenet/lunaclient# uname -a
Linux sbolla-6c7b7589d8-5c2rb 3.10.0-693.5.2.el7.x86_64 #1 SMP Fri Oct 20 20:32:50 UTC 2017 x86_64 GNU/Linux
root@sbolla-6c7b7589d8-5c2rb:/usr/safenet/lunaclient#

我正在尝试使用 sshpass 命令执行一个简单的 scp,如下所示并遇到此错误。任何想法都非常感谢。请注意,我尝试了 scp 而不是 cp。事实上,这一行是在一个脚本中,我在 linux 命令行上尝试过,我得到了这个错误。我还尝试使用 ' 和 " 和 \ 以及所有组合来转义环境变量,但这似乎没有帮助。

root@sbolla-6c7b7589d8-5c2rb:/usr/safenet/lunaclient/bin# sshpass -p '$H_PASSWORD' scp -v  $H_USERNAME@$H_HOSTNAME:server.pem .
Executing: cp '--' 'admin@abc-def.brilliant.local' '.'
cp: cannot stat 'admin@abc-def.brilliant.local': No such file or directory
Executing: cp '--' ':server.pem' '.'
cp: cannot stat ':server.pem': No such file or directory
root@sbolla-6c7b7589d8-5c2rb:/usr/safenet/lunaclient/bin#

如果我明确地使用这个命令,我可以让它工作,不知道为什么。请不要将这些输出中的主机名编辑为一些愚蠢的名称

root@sbolla-6c7b7589d8-5c2rb:/usr/safenet/lunaclient#   sshpass -p $HSM_PASSWORD scp admin@grs-defcon.brilliant.local:server.pem .

ls -lia 
root@sbolla-6c7b7589d8-5c2rb:/usr/safenet/lunaclient# ls -l | grep ser
-rw-r--r-- 1 root root 1172 Apr 28 12:23 server.pem
root@sbolla-6c7b7589d8-5c2rb:/usr/safenet/lunaclient# date
Sat Apr 28 12:24:29 UTC 2018
root@sbolla-6c7b7589d8-5c2rb:/usr/safenet/lunaclient#

我已经尝试了下面提供的答案,但没有奏效

sshpass -p "$H_PASSWORD" scp -v $H_USERNAME@${H_HOSTNAME}:server.pem .

我注意到的另一件事是,如果我在这个容器上执行 env,我会在环境变量中看到一个额外的行,这可能是一个问题。看看这个环境如何显示。请注意,我没有故意输入一行,当我输入 env 命令时,我看到 H_HOSTNAME 和 H_PARTITION 旁边的行很奇怪 H_PARTITION=运算符

MYSQL_PORT=tcp://11.123.113.242:3306
LUNAHS=TRUE
H_HOSTNAME=grs-defcon.brilliant.local

ROOT_PORT_443_TCP_PORT=443
MYSQL_PORT_3306_TCP_ADDR=11.456.231.242

【问题讨论】:

  • 使用-v 选项时是否会出现问题?
  • 我正在尝试在脚本和命令行中不使用 -v 选项。我仅将其用于更多调试信息。因此,无论是否使用 -v 选项,问题都会发生
  • 查看您的环境 - echo -n "$H_HOSTNAME" | cat -vet 的输出是什么?最后可能有 CR 或其他空格。
  • 它有一个输入。见 abc-defcon.brilliant.local$
  • 如果您需要帮助来查找额外换行符的来源,请参阅 How to determine where an environment variable came from

标签: kubernetes sh scp sshpass


【解决方案1】:

看起来像 2 个外壳扩展问题。试试:

sshpass -p "$H_PASSWORD" scp -v $H_USERNAME@${H_HOSTNAME}:server.pem .

【讨论】:

  • 不幸的是,这也不起作用, root@sbolla-6c7b7589d8-5c2rb:~# sshpass -p "$HSM_PASSWORD" scp -v $HSM_USERNAME@${HSM_HOSTNAME}:server.pem 。执行:cp '--' 'admin@grs-defcon.brilliant.local' '.' cp:无法统计'admin@grs-defcon.brilliant.local':没有这样的文件或目录执行:cp'--'':server.pem''。 cp: cannot stat ':server.pem': No such file or directory root@sbolla-6c7b7589d8-5c2rb:~#
  • 我注意到的另一件事是,如果我在这个容器上执行 env,我会在环境变量中看到一个额外的行,这可能是一个问题。看看这个环境如何显示。请注意,我没有故意输入一行,当我输入 env 命令时,我看到 HSM_HOSTNAME 和 HSM_PARTITION 旁边的行很奇怪 HSM_PARTITION=Operator MYSQL_PORT=tcp://11.123.113.242:3306 USE_LUNAHSM=TRUE HSM_HOSTNAME=grs- defcon.brilliant.local ROOT_PORT_443_TCP_PORT=443 MYSQL_PORT_3306_TCP_ADDR=11.456.231.242
【解决方案2】:
# sshpass -p '$H_PASSWORD' scp -v  $H_USERNAME@$H_HOSTNAME:server.pem .
Executing: cp '--' 'admin@abc-def.brilliant.local' '.'
cp: cannot stat 'admin@abc-def.brilliant.local': No such file or directory
Executing: cp '--' ':server.pem' '.'

您的 shell 变量 H_HOSTNAME 末尾有一些空格。它导致 scp 命令是这样的:

scp -v someuser@somehost :server.pem .

Scp 将此解释为意味着应将名为someuser@somehost:server.pem 的两个本地文件复制到本地目录.。它试图通过调用cp 程序对每个文件进行本地到本地的复制。

【讨论】:

    猜你喜欢
    • 2013-10-11
    • 2012-04-07
    • 2019-06-03
    • 1970-01-01
    • 2016-04-29
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多