如何使用php脚本登录ssh并下载文件

时间:2019-04-12 19:46:38

标签: php cron

我有一个digitalocean Droplet,其中有.sql备份。我想更确定自己也将这些备份保存到其他服务器上,这样,如果我存储备份的原始服务器发生了问题,我将拥有另一个可以获取该备份的服务器。因此,我决定拥有另一台服务器,该服务器通过cronjob每小时都会登录到原始服务器并获取sql文件。

问题1)我应将原始服务器的公用/专用密钥存储在另一台服务器中的什么位置?在本地Windows中,我将其存储在Users / myusername文件夹中的.ssh文件夹中。但是现在我的服务器都是ubuntu。

问题2)下载文件,我知道我可以使用scp。像这样:

scp username@droplet_ip:/path/to/file /path/to/destination

将其放入php脚本中,并使cron作业执行该php脚本。问题是我还为原始服务器设置了密码。所以我在这里显示的此命令将需要密码,而且我不确定如何执行此操作,因为当cronjob开始执行它时,我不知道如何自动提供密码。

当我从本地计算机运行此命令时,我开始输入,并要求我提供密码。

1 个答案:

答案 0 :(得分:1)

尝试ssh2

https://www.php.net/manual/en/ref.ssh2.php

https://www.php.net/manual/en/function.ssh2-scp-recv.php

$connection = ssh2_connect('shell.example.com', 22);
ssh2_auth_password($connection, 'username', 'password');

ssh2_scp_recv($connection, '/remote/filename', '/local/filename');

只需通过方法https://www.php.net/manual/en/function.ssh2-auth-hostbased-file.php

$connection = ssh2_connect('shell.example.com', 22, array('hostkey'=>'ssh-rsa'));

if (ssh2_auth_hostbased_file($connection, 'remoteusername', 'myhost.example.com',
                             '/usr/local/etc/hostkey_rsa.pub',
                             '/usr/local/etc/hostkey_rsa', 'secret',
                             'localusername')) {
  echo "Public Key Hostbased Authentication Successful\n";
} else {
  die('Public Key Hostbased Authentication Failed');
}