我想PHP发送myfile.txt到远程SSH使用密码登录。
在OSX bash中,我使用以下命令手动发送文件:
scp /Users/myname/Documents/myfile.txt root@192.168.1.116:/Docs/myfile.txt
因为我需要通过PHP来完成,所以我制作了这个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
我可以使用:运行上述代码/使现代化sh
在终端中,它根据我的需要发送文件。
现在的问题是,当我在PHP中添加这个bash脚本时,它不会发送文件。
我曾经尝试过:
exec('/Library/WebServer/update.sh 2>&1', $output);
print_r($output);
我被这个错误卡住了/msg:
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太快了?
无论如何,我解决了我的问题,在发送mYPassWORD\r后添加睡眠
。这是我的工作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
和didchmod x更新。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脚本中添加sleep0.2
就解决了这个问题。
我还尝试了sleep0.1
,但后来出现了错误。因此,睡眠时间可能取决于您的文件有多大?我的文件。txt只有3.6kb,0.2秒睡眠效果很好。
如果文件较大,可以尝试sleep 1
或sleep 5
等。。
这种方法可以解决这个问题,但感觉不安全,因为如果文件大小在每次调用中变化,或者如果ssh连接缓慢,它可能会失败。
如果有人能为改进这个答案做出贡献,我将不胜感激。
如何使用将文件夹从远程复制到本地主机? 我使用登录我的服务器。 然后,我要将远程文件夹复制到本地。 我如何实现这一点?
问题内容: 我正在尝试使用运行 (安全副本)命令。登录名要求我发送密码: 这立即返回错误: 我 确定 密码正确。我可以通过在外壳上手动调用来轻松验证它。那为什么不起作用呢? 请注意,有许多与此类似的问题,询问并发送用于自动SSH或FTP登录的密码 这些问题的答案不起作用和/或不适用,因为我使用的是Python 3。 问题答案: 您链接的第二个答案建议您使用Pexpect(这通常是与需要输入的命令行
我正试图使用MacBook上的scp将本地文件复制到远程服务器。 当我知道文件存在(我已经检查并重新检查了路径)时,我不断地得到错误“没有这样的文件或目录”。该文件具有u、g和O的文件rwx权限。文件不是符号链接。 文件a2.pdf位于本地计算机的根目录中。我还复制了路径,就像我使用pwd时所显示的那样,它包含在目录中,如下所示: 我正在登录到远程服务器时启动此命令。给出了本地路径的错误。
问题内容: 我是一名盲人学生,目前正在系统admin/shell编程课程中。尽管ssh可以很好地执行ls,pwd等命令,但编辑器不能与我的屏幕阅读器和ssh会话配合使用。我想知道是否可以在ssh上挂载Linux文件夹,使其显示为Windows驱动器?这样,我可以使用可访问的软件编辑所需的任何文件,而不必经常使用SCP来回发送文件。 问题答案: 早在2002年,Novell就开发了一种名为NetDr
本文向大家介绍PHP实现远程下载文件到本地,包括了PHP实现远程下载文件到本地的使用技巧和注意事项,需要的朋友参考一下 代码很简单就不多废话了,直接奉上: 再来个远程下载文件到服务器 以上所述就是本文的全部内容了,希望大家能够喜欢。
我能做些什么,让它发挥作用,有什么建议吗? 提前感谢!