我对 SLES 12 SP4 Linux 服务器中的 OpenSSH 有一个奇怪的问题。
我们在我们的服务器上安装了一个定制的 OpenSSH,所以在每台机器上我们都有两个版本的 OpenSSH,一个是操作系统的官方包,另一个是我们自己编译的。
对于 SLES 12 SP4,如果我们从另一台服务器运行以下命令
scp -r directory/. destination_server:/path/to/directory
出现以下错误
scp: error: unexpected filename: .
我们已经验证问题出在 /usr/bin/scp 下的 scp 二进制文件上,它由我们的 OpenSSH 运行,而不是它自己路径下的 scp。
经过搜索测试,解决方案是去掉 /usr/bin/scp 上的执行权限,所以我们版本的 OpenSSH 无法使用,客户端的 scp -r 完美运行。
是否有更优雅的方式告诉守护程序在其自己的路径下使用 scp 二进制文件而不是 /usr/bin/scp?
此致
它不是scp直接使用该程序的 SSH 守护进程,所以不,您不能将其重新配置为使用另一个二进制文件。您需要scp从系统中删除除“正确”二进制文件之外的所有文件,或者重写PATH环境变量(最好在系统默认配置文件中),因为从 SSH 守护程序的角度来看,scp它只是运行远程命令的包装器。
基本上,这是做什么的scp:
sshscp -t (target path)通过通道发送命令,就像您使用了 ssh user@target scp -t /this/file命令一样。您可以使用以下命令模拟 scp:
ssh user@host scp -t /tmp/aFile.to.create
(enter your password)
C0664 41 originalFileName
The file should contain
these two lines.
(press enter twice)
Run Code Online (Sandbox Code Playgroud)
第三行包含访问权限、文件大小和原始文件名。并且由于scp命令“按原样”发送,因此由目标系统为用户找到该程序。