问题描述
如果您对这个问题有一个简单的答案,请花点时间阅读以下内容,我对我的要求的解决方案很感兴趣。
目的是要自动将(最终特定的)从服务器A上传的内容重定向到另一服务器B。
在客户端上有一个上传表单(<form class="dropzone" enctype="multipart/form-data" action="upload.php" method="POST">
...),它在serverA上调用upload.php
。上传到serverA正常。在serverA上是一个脚本,该脚本应由upload.php触发(无需我作为用户登录到serverA!)将上传的文件传输到serverB。
如果您认为这可能是一条可行的道路(我没有找到终点),我在这里说明自己的工作...
upload.php:
<?php
$uploaddir = './uploads/';
$uploadfile = $uploaddir . basename($_FILES['file']['name']);
echo '<pre>';
if (move_uploaded_file($_FILES['file']['tmp_name'],$uploadfile)) {
echo "File is valid,and was successfully uploaded to A.\n";
echo "Now: call of scp-up.sh $uploadfile :\n\n";
echo (shell_exec("./scp-up.sh $uploadfile"));
} else {
echo "Upload to server A failed\n";
}
echo "Debug info of upload.php:\n";
print_r($_FILES);
echo '</pre>';
?>
这可以正常工作,并且文件已正确存储在serverA的uploads-directoy中。
现在调用脚本scp-up.sh
,以传输到serverB:
scp-up.sh:
#!/bin/bash
echo "scp $1"
scp -v -B -i ./.ssh/id_rsa -o IdentitiesOnly=yes -o KexAlgorithms=ecdh-sha2-nistp256 $1 ssh-userb@serverb.kasserver.com:/www/htdocs/web/uploads/ 2>&1
当我登录并使用带有文件名的脚本时,它可以工作。
但是当它一个人呆着的时候不是。
首先,我尝试不使用-o选项,这使“主机密钥验证失败”处于早期状态,并且缺少id_rsa-cert.pub
。因此,我生成了一对新的密钥ssh-keygen -f ca_key
,并由ssh-keygen -s ca_key -I server-b -h -n serverb.kasserver.com ./id_rsa.pub
制作了该证书。
现在我有这些文件
-rwx------ 1 ssh-usera usera 1679 Aug 16 18:23 ca_key
-rwx------ 1 ssh-usera usera 402 Aug 16 18:23 ca_key.pub
-rwx------ 1 ssh-usera usera 1679 Aug 16 17:45 id_rsa
-rwx------ 1 ssh-usera usera 1375 Aug 16 18:35 id_rsa-cert.pub
-rwx------ 1 ssh-usera usera 402 Aug 16 18:03 id_rsa.pub
-rwx------ 1 ssh-usera usera 444 Aug 16 17:45 known_hosts
如您所见:全部更改为700。
结果:证书不再丢失,“主机密钥验证失败”现在处于后期状态。
以下是输出:
File is valid,and was successfully uploaded to A.
Now: call of scp-up.sh ./uploads/ACT_0180.jpg :
scp ./uploads/ACT_0180.jpg
Executing: program /usr/bin/ssh host serverb.kasserver.com,user ssh-userb,command scp -v -t /www/htdocs/userb/web/uploads/
OpenSSH_7.2p2 Ubuntu-4ubuntu2.10,OpenSSL 1.0.2g 1 Mar 2016
debug1: Connecting to serverb.kasserver.com [85.13.888.999] port 22.
debug1: Connection established.
debug1: identity file ./.ssh/id_rsa type 1
debug1: identity file ./.ssh/id_rsa-cert type 5
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.10
debug1: Remote protocol version 2.0,remote software version OpenSSH_7.2p2 Ubuntu-4ubuntu2.10
debug1: match: OpenSSH_7.2p2 Ubuntu-4ubuntu2.10 pat OpenSSH* compat 0x04000000
debug1: Authenticating to serverb.kasserver.com:22 as 'ssh-userb'
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: algorithm: ecdh-sha2-nistp256
debug1: kex: host key algorithm: ecdsa-sha2-nistp256
debug1: kex: server->client cipher: chacha20-poly1305@openssh.com MAC: compression: none
debug1: kex: client->server cipher: chacha20-poly1305@openssh.com MAC: compression: none
debug1: sending SSH2_MSG_KEX_ECDH_INIT
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ecdsa-sha2-nistp256 SHA256:DXdT/AyN2+QYF2P7/ZFP9P4JsHlGrCCTBOx1zmDaSy8
Host key verification failed.
lost connection
Debug info of upload.php:
Array
(
[file] => Array
(
[name] => ACT_0180.jpg
[type] => image/jpeg
[tmp_name] => /tmp/phpanRmnx
[error] => 0
[size] => 621562
)
)
为了进行比较:这是成功登录的脚本的输出,我登录后:
https://pastebin.com/raw/p5JAT9FC
(我尝试在scp命令中使用-o KexAlgorithms=ecdsa-sha2-nistp256
,但这一次失败。)
说得很清楚,我不太了解cert概念,因此可能会丢失一部分。 在这方面,我只是请求 this 路径(带有密钥和cert的scp)是否是一个好的路径。 如果您知道实现目标的更简单方法,那么我宁可对此有所了解!
有什么主意吗?
由于外行有很多可能性,所以我非常感谢依赖知识和/或经验而不是假设的答案...
非常感谢您!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)