OpenSSH在SLES 12 SP4 Linux服务器上有一个奇怪的问题。
我们在服务器上安装了一个定制的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?
诚挚的问候
发布于 2019-04-30 13:11:47
直接使用scp程序的不是SSH守护进程,所以不能将它重新配置为使用另一个二进制程序。您需要从系统中移除“正确”的scp二进制文件,或者重写PATH环境变量(最好是在系统默认配置文件中),因为从SSH守护进程的角度来看,scp只是运行远程命令的包装器。
基本上,以下是scp所做的工作:
ssh启动连接scp -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)第三行包含访问权限、文件大小和原始文件名。由于scp命令发送了“原样”,所以应该由目标系统为用户找到该程序。
https://serverfault.com/questions/965259
复制相似问题