【问题标题】:PHP SSH Lib, echoing to a filePHP SSH Lib,回显到文件
【发布时间】:2014-04-15 23:29:48
【问题描述】:

我正在尝试创建一个 PHP 脚本,该脚本通过 ssh 在远程 linux 服务器上创建一个文件,并将文件内容回显到其中。

但是,我无法弄清楚如何正确和安全地编码/转义文件内容,以免内容被解释为命令。

我正在使用来自here 的 phpseclib。

我尝试过类似的东西

echo $ssh->exec('sudo echo "' . escapeshellarg($newConfig) . '" > /etc/nginx/nginx.conf') . "\n";

但没有成功。

谢谢,

史蒂夫

【问题讨论】:

  • 在你的问题之后,我去了phpseclib页面并尝试学习它。但是我有问题要问你:)。你没有得到错误无法连接到主机...或什么?
  • 我已经在前面的步骤中使用$ssh = new Net_SSH2($url); if (!$ssh->login('username', $sshkey)) { echo 'Login Failed'; } else { echo $ssh->exec('pwd'); }连接到主机

标签: php encoding ssh escaping phpseclib


【解决方案1】:

escapeshellcmd 呢?引用那个 vs escapeshellarg 的描述:

escapeshellarg() 在字符串和引号/转义符周围添加单引号 任何现有的单引号允许您将字符串直接传递给 shell 函数并将其视为单个安全参数。

...和...

escapeshellcmd() 转义字符串中可能使用的任何字符 欺骗 shell 命令执行任意命令。这个 应该使用函数来确保来自用户的任何数据 在将此数据传递给 exec() 或 system() 之前,输入被转义 函数,或反引号运算符。

后面的字符以反斜杠开头:#&;`|*?~^()[]{}$\, \x0A 和 \xFF。 ' 和 " 仅在它们未配对时才被转义。在 Windows,所有这些字符加上 % 都被替换为空格。

【讨论】:

  • 这类作品。内容不会尝试执行,而是现在将所有转义保存到文件本身,因此配置无效。有没有办法解决这个问题?
  • 您能否通过 SFTP 下载您使用该命令创建的 *.conf 文件并将其与应有的文件进行比较?我假设您使用 SSH 来创建它,因为虽然它的权限允许读取它,但它们不允许在不使用 sudo 的情况下写入它?
  • 是的,没错。作为一种解决方法,我使用 SSH 更改权限,使用 SFTP 写入文件,然后使用 SSH 再次更改权限。
  • 那行得通。虽然知道文件 idk lol 中有什么不同仍然很有趣。
  • 所有配置都在文件本身中进行了转义。例如。每行都以^ 开头,而不是' 引号,而是更多^
【解决方案2】:

我做错了,我应该使用Net_SFTP 而不是NET_SSH 来处理这种事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    • 2019-03-05
    • 1970-01-01
    相关资源
    最近更新 更多