Bash for remote on remote server

时间:2017-06-24 16:17:19

标签: bash for-loop ssh grep remote-server

我是bash的新手,我正在尝试创建一个检查恶意文件的脚本。特别是那些使用全局PHP变量隐藏内容的人。以下是此类文件的示例行:

$GLOBALS['qahtm46']($zadoh31) < 12) { $GLOBALS['wlcrh95']($i34, $gxfej87);

我需要远程检查并获取结果,以下是我当前连接和获取其他信息的方式:

eval=$(ssh -q -t -o GSSAPIAuthentication=yes user@$webs "/usr/bin/ssuu $domain" << EOF
grep -l -r --include=*.php -PHn "(eval\(.*\);)" .
exit
EOF
)

当我echo $eval时,它会打印任何匹配的文件名。太好了!

每当我直接在服务器上运行以下命令时:

for x in $(find public_html -type f -name '*.php' | xargs grep -ol 'GLOBALS'); do grep -o 'GLOBALS' $x | wc -l | tr '\n' ' ' ; echo $x; printf "\n"; sleep 1; done
exit
EOF
)

我得到了正确的输出:

1 public_html/update.php
363 public_html/sites/all/themes/corporate_blue/images/proxy2.php
363 public_html/sites/all/themes/corporate_blue/images/proxy.php
2 public_html/sites/all/modules/views/views.api.php
2 public_html/sites/all/modules/imce/tpl/imce-page.tpl.php
1 public_html/sites/all/modules/ckeditor/includes/filemanager.config.php
4 public_html/modules/simpletest/drupal_web_test_case.php

然而,当我使用我通常的方法运行它时,我没有得到任何输出,如果我输出到文件,文件被创建但没有写入任何内容:

globals=$(ssh -q -t -o GSSAPIAuthentication=yes user@$webs "/usr/bin/ssuu $domain" << EOF
for x in $(find public_html -type f -name '*.php' | xargs grep -ol 'GLOBALS'); do grep -o 'GLOBALS' $x | wc -l | tr '\n' ' ' ; echo $x; printf "\n"; sleep 1; done
exit
EOF
)

有人能看到问题吗?

1 个答案:

答案 0 :(得分:0)

运行时:

ssh server << EOF
for x in $(find ...); ...
EOF

在将脚本传递给服务器之前,本地文档的内容将由本地shell进行评估。 要在服务器上对其进行评估,请双击开头EOF

ssh server << "EOF"
for x in $(find ...); ...
EOF