`bash: scp: 未找到命令`,而我在 `$PATH` 中确实有 `scp`

`bash: scp: 未找到命令`,而我在 `$PATH` 中确实有 `scp`

这是我的屏幕输出:

loug@loug-Satellite-P50-A:~/Downloads$ scp -i ~/--------- browser-uat.zip ubuntu@yabuat:
bash: scp: command not found
lost connection
loug@loug-Satellite-P50-A:~/Downloads$
loug@loug-Satellite-P50-A:~/Downloads$ ssh -i ~/--------- ubuntu@yabuat
[email protected]:~$
[email protected]:~$ scp
usage: scp [-12346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
           [-l limit] [-o ssh_option] [-P port] [-S program]
           [[user@]host1:]file1 ... [[user@]host2:]file2
[email protected]:~$
[email protected]:~$ echo $PATH
/opt/sonar/runner/bin:/snap/bin:/bin:/usr/bin:/usr/lib/jvm/java-8-oracle/bin:/usr/lib/jvm/java-8
-oracle/db/bin:/usr/lib/jvm/java-8-oracle/jre/bin:/usr/bin
[email protected]:~$
[email protected]:~$ echo $SHELL
/bin/bash
[email protected]:~$
[email protected]:~$ sudo apt install openssh-client
Reading package lists... Done
Building dependency tree
Reading state information... Done
openssh-client is already the newest version (1:7.2p2-4ubuntu2.1).
o upgraded, 0 newly installed, 0 to remove and 108 not upgraded.
[email protected]:~$ exit
logout
Connection to yabuat closed.
loug@loug-Satellite-P50-A:~/Downloads$

看:带注释的屏幕截图

如屏幕副本所示,scp命令失败,并显示

bash: scp: command not found
lost connection

但是,在我ssh进入远程服务器并输入之后scp,我可以看到该命令可用,并且我的$PATH环境良好。

当我尝试安装时openssh-client,正如许多地方所建议的那样,我得到了openssh-client is already the newest version

现在我陷入了困境,不知道scp命令出了什么问题。

更新

openssh-client在本地已经安装好了,本地环境没有错误:

loug@loug-Satellite-P50-A:~/Downloads$ scp
usage: scp [-12346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
           [-l limit] [-o ssh_option] [-P port] [-S program]
           [[user@]host1:]file1 ... [[user@]host2:]file2
loug@loug-Satellite-P50-A:~/Downloads$ echo $PATH
/opt/play:/opt/idea/bin:/opt/maven/bin:/home/loug/bin_local:/home/loug/bin:/home/loug/.nvm/versi
ons/node/v7.7.4/bin:/usr/local/share/resin/bin:/home/loug/bin:/usr/local/sbin:/usr/local/bin:/us
r/sbin:/usr/bin:/usr/local/go/bin:/sbin:/bin:/usr/games:/usr/local/games
loug@loug-Satellite-P50-A:~/Downloads$

看:带注释的屏幕截图

更新二

屏幕副本显示该scp命令在两端均可用:

loug@loug-Satellite-P50-A:~/Downloads$ echo 'show we have local scp installed'
show we have local scp installed
loug@loug-Satellite-P50-A:~/Downloads$ scp
usage: scp [-12346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
           [-l limit] [-o ssh_option] [-P port] [-S program]
           [[user@]host1:]file1 ... [[user@]host2:]file2
loug@loug-Satellite-P50-A:~/Downloads$ echo 'show teh error in scp files to remote'
show the error in scp files to remote
loug@loug-Satellite-P50-A:~/Downloads$ scp -i ~/.keys/yab-ci.pem browser-uat.zip ubuntu@yabuat:
bash: spc: command not found
lost connection
loug@loug-Satellite-P50-A:~/Downloads$ echo 'ssh into remote and test scp on remote'
ssh into remote and test scp on remote
loug@loug-Satellite-P50-A:~/Downloads$ ssh -i ~/.keys/yab-ci.pem ubuntu@yabuat
[email protected]:~$ scp
usage: scp [-12346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
           [-l limit] [-o ssh_option] [-P port] [-S program]
           [[user@]host1:]file1 ... [[user@]host2:]file2
[email protected]:~$ exit
logout
Connection to yabuat closed.
loug@loug-Satellite-P50-A:~/Downloads$ echo 'so we proved the scp command available on both end'

so we proved the scp command available on both end
loug@loug-Satellite-P50-A:~/Downloads$

看:截屏

更新三

根据其中一个答案的要求,以下是which scp远程服务器和本地系统上的命令的结果:

loug@loug-Satellite-P50-A:~/Downloads$ ssh -i ~/.keys/yab-ci.pem ubuntu@yabuat
[email protected]:~$ which scp
/usr/bin/scp
[email protected]:~$ exit
logout
Connection to yabuat closed.
loug@loug-Satellite-P50-A:~/Downloads$ ssh -T -i ~/.keys/yab-ci.pem ubuntu@yabuat
^Cloug@loug-Satellite-P50-A:~/Downloads$ which scp
/usr/bin/scp
loug@loug-Satellite-P50-A:~/Downloads$

看:带注释的屏幕截图

马丁的更新 IV

@Martin,这是按照你的指示得到的结果

loug@loug-Satellite-P50-A:~/Downloads$ ssh -T -i ~/.keys/yab-ci.pem ubuntu@yabuat
loug@loug-Satellite-P50-A:~/Downloads$ which scp
/usr/bin/scp
scp
usage: scp [-12346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
           [-l limit] [-o ssh_option] [-P port] [-S program]
           [[user@]host1:]file1 ... [[user@]host2:]file2

看:截屏

答案1

很有可能您已将远程PATH设置为仅指向scp交互式会话。

使用scp非交互式会话。

为了验证,请尝试登录ssh -T -i ...,然后尝试运行scp

您应该会遇到同样的错误。


交互式和非交互式会话可能使用不同的启动脚本集。并且/或者根据TERM环境变量的存在与否(或类似情况)在脚本中采用不同的分支。

您可能需要修复启动脚本以PATH在任一情况下正确设置。

答案2

好像你已经SCP仅在其中一台主机上,而不在另一台主机上。

从您的屏幕截图中我们可以看到SCP存在于主机“ubuntu@ip-172-31-25-135”上,但是不存在于主机“luog@luog-satellite-P50-A”主机上。

SCP 必须存在于两个都机器正常工作。

使用 将其安装在“luog@luog-satellite-P50-A”主机上sudo apt-get install openssh-client。之后它应该可以正常工作。

问候,迈克

答案3

查看~/.bashrc远程机器上的文件。你可能PATH对其进行了修改:

export PATH="$PATH;~/bin/"

或类似的东西。注释掉这一行。现在scp应该可以正常工作了。

编辑:

这是错误scp https://bugzilla.redhat.com/show_bug.cgi?id=20527

如果您在以下位置发现损坏的代码~/.bashrc

if [ "$SSH_TTY" ]
then
    # broken code
fi

答案4

这可能很傻,但是你的脚本里面有变量名 PATH 吗?

我遇到过这种情况,我使用变量名 PATH 覆盖了实际的 $PATH。更改此变量名,应该就没问题了。

相关内容