通过 Web 服务器执行 rsync bash 脚本不起作用
Executing rsync via web server bash script not working
我有一个简单的 Web php 脚本可以触发 bash 脚本
<?php
if(isset($_POST['submit']))
{
$output=shell_exec('sh /usr/lib/cgi-bin/script.sh');
echo $output;
}
?>
<form action="" method="post">
<input type="submit" name="submit" value="Call my Shell Script">
</form>
我在脚本中尝试了简单的命令,如重命名和触摸,它似乎工作正常。
rsa 密钥已设置并且 rsync 从终端运行,但我得到以下信息:
Host key verification failed.^M
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.1]
Could not create directory '/var/www/.ssh'.^M
Host key verification failed.^M
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.1]
脚本内容:
rsync -azv -e 'ssh -p 2222' /home/downloads/ user@ip:/home/downloads
我可能是错的,但这似乎是一个权限问题?
您的问题来自 "Host key verification failed"。
该脚本使用您的 www 用户(apache、www-data、...)执行。
在您的 /etc/passwd 中,您可能已将该用户的主目录定义为 /var/www.
如果该用户没有该目录的权限,它无法创建 .ssh 文件夹来存储远程机器的主机密钥。
所以,您可以手动创建文件夹:
sudo mkdir /var/www/.ssh
sudo chmod 600 /var/www/.ssh
sudo chown <your-www-user> .ssh
这是第一步,但 rsync 仍然会失败,因为您必须接受远程主机密钥。
因此,第二步是使用 SSH 连接到远程主机以获取远程主机密钥 :
su - <your-www-user>
ssh -p 2222 user@ip
第三个问题,登录。您应该为每个密钥配置一个 SSH 连接 以避免在每个连接时都必须输入密码(无论哪种方式,您的 rsync 都会失败)。
因此,要生成 ssh 密钥:
su - <your-www-user>
ssh-keygen -t rsa
将您的 ssh public 密钥复制到远程主机:
su - <your-www-user>
ssh-copy-id user@ip
这应该可以解决问题。
我有一个简单的 Web php 脚本可以触发 bash 脚本
<?php
if(isset($_POST['submit']))
{
$output=shell_exec('sh /usr/lib/cgi-bin/script.sh');
echo $output;
}
?>
<form action="" method="post">
<input type="submit" name="submit" value="Call my Shell Script">
</form>
我在脚本中尝试了简单的命令,如重命名和触摸,它似乎工作正常。
rsa 密钥已设置并且 rsync 从终端运行,但我得到以下信息:
Host key verification failed.^M
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.1]
Could not create directory '/var/www/.ssh'.^M
Host key verification failed.^M
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.1]
脚本内容:
rsync -azv -e 'ssh -p 2222' /home/downloads/ user@ip:/home/downloads
我可能是错的,但这似乎是一个权限问题?
您的问题来自 "Host key verification failed"。
该脚本使用您的 www 用户(apache、www-data、...)执行。 在您的 /etc/passwd 中,您可能已将该用户的主目录定义为 /var/www.
如果该用户没有该目录的权限,它无法创建 .ssh 文件夹来存储远程机器的主机密钥。
所以,您可以手动创建文件夹:
sudo mkdir /var/www/.ssh
sudo chmod 600 /var/www/.ssh
sudo chown <your-www-user> .ssh
这是第一步,但 rsync 仍然会失败,因为您必须接受远程主机密钥。
因此,第二步是使用 SSH 连接到远程主机以获取远程主机密钥 :
su - <your-www-user>
ssh -p 2222 user@ip
第三个问题,登录。您应该为每个密钥配置一个 SSH 连接 以避免在每个连接时都必须输入密码(无论哪种方式,您的 rsync 都会失败)。
因此,要生成 ssh 密钥:
su - <your-www-user>
ssh-keygen -t rsa
将您的 ssh public 密钥复制到远程主机:
su - <your-www-user>
ssh-copy-id user@ip
这应该可以解决问题。