我有两台(linux)服务器:A 和 B
一个 PHP 脚本在 A 上,我想在 B 上执行它,但没有在 B 上执行它,这个脚本永远不应该存在于 B 上(仅在 ram 中),所以没有“在 B 上复制,从 A 上的 ssh 命令执行,擦除乙”。
我有从 A 访问 B 的 ssh 密钥,但没有从 B 访问 A。也许是这样的:
ssh root@B 'php -r ' | echo /myscript/on_serverA
Run Code Online (Sandbox Code Playgroud)
或者
<?php
$script=file_get_contents('executable_php_script');
system('ssh root@IP \'php -r "'.$script.'"\'');
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
注意:这是一个非常具体的案例,所以我不需要替代或安全建议。
ssh通过管道传输的内容都将传递到正在运行的程序的 STDIN 中因此:
ssh example.com php < test.php
Run Code Online (Sandbox Code Playgroud)
... 将 ssh 到example.com,在php那里运行并将内容test.php从本地机器传送到远程机器php。
关于对该问题的评论:请注意,如果具有 root 访问权限的人example.com想要窃取脚本,他们可以用php包装器替换可执行文件,该包装器将 STDIN 记录到文件,然后再将其转发到真实的php. 这远非防弹安全措施。