![`bash: scp: 未找到命令`,而我在 `$PATH` 中确实有 `scp`](https://linux22.com/image/1529842/%60bash%3A%20scp%3A%20%E6%9C%AA%E6%89%BE%E5%88%B0%E5%91%BD%E4%BB%A4%60%EF%BC%8C%E8%80%8C%E6%88%91%E5%9C%A8%20%60%24PATH%60%20%E4%B8%AD%E7%A1%AE%E5%AE%9E%E6%9C%89%20%60scp%60.png)
这是我的屏幕输出:
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。更改此变量名,应该就没问题了。