繁体   English   中英

PHP-如何将BASH OSX中的SCP本地文件通过SSH与密码一起通过SSH远程传输?

[英]PHP - How to SCP local file from BASH OSX to remote via SSH with Password in PHP?

我希望PHP将myfile.txt发送到使用密码进行登录的远程SSH。

我从OSX bash使用以下命令手动发送文件:

scp /Users/myname/Documents/myfile.txt root@192.168.1.116:/Docs/myfile.txt

由于我需要通过PHP进行此upload.sh ,因此制作了这个upload.sh bash脚本:

#!/usr/bin/expect
spawn scp /Users/myname/Documents/myfile.txt root@192.168.1.116:/Docs/myfile.txt
expect "root@192.168.1.116's password:"
send "mYpassWORD\r"
interact

我可以在终端中使用./update.sh运行以上代码,它会根据需要发送文件。

现在的问题是,当我在PHP中添加此bash脚本时,它不发送文件。

我努力了:

exec('/Library/WebServer/update.sh 2>&1', $output);
print_r($output); 

而且我陷入了这个错误/味精:

Array
(
    [0] => spawn scp /Users/myname/Documents/myfile.txt root@192.168.1.116:/Docs/myfile.txt
    [1] => root@192.168.1.116's password:
)

在bash中,密码已发送,一切正常,通过PHP不会上传文件。 我还注意到,第一次通过PHP运行它时,它说SSH主机密钥不匹配,因此我将.ssh文件夹复制到服务器根目录,该错误消失了。

任何人都可以帮助如何使其工作吗? 谢谢

工作正常,但不是坚如磐石的解决方案。

我找到了解决方案并使它正常工作,但不确定这是否正确。 问题与密码无关。 问题是/曾经:Bash脚本太快了。 还是PHP太快了?

无论如何,我通过在send "mYpassWORD\\r"之后添加sleep来解决了我的问题。 这是我可以使用的Bash命令,可以从PHP访问该命令以使用密码将文件发送到远程:

#!/usr/bin/expect
spawn scp /Library/WebServer/Documents/test34/myfile.txt root@192.168.1.116:/Docs/myfile.txt
expect "root@192.168.1.116's password:"
send "mYpassWORD\r"
sleep 0.2
interact

我将其保存为: update.sh并执行chmod +x update.sh

然后在PHP文件中: index.php我写道:

<?php
$do = shell_exec("(/Library/WebServer/Documents/test34/update.sh)");
var_dump($do);
?>

并得到以下成功结果

string(320) "spawn scp /Library/WebServer/Documents/test34/myfile.txt root@192.168.1.116:/Docs/myfile.txt
root@192.168.1.116's password: 

myfile.txt                                  0%    0     0.0KB/s   --:-- ETA
myfile.txt                                100% 3649     3.6KB/s   00:00    
"

因此,只需在Bash脚本中添加sleep 0.2解决此问题。

我也尝试过sleep 0.1但随后出现错误。 因此,睡眠时间可能取决于文件的大小? myfile.txt只有3.6kb,0.2秒的睡眠效果很好。

如果文件较大,则可以尝试sleep 1sleep 5等。

这种方法可以解决问题,但并不安全,因为如果每次调用文件大小不同或ssh连接速度慢时,该方法都可能会失败。

如果有人可以为改善这个答案做出贡献,我将非常感激。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM