【问题标题】:bash cgi remote sshbash cgi 远程 ssh
【发布时间】:2015-10-07 16:18:10
【问题描述】:

我一直在谷歌上搜索这个,但似乎没有多少人写 bash cgi...

所以我有一个在浏览器上运行并接受用户输入的小 cgi bash 脚本,它应该远程 ssh 到远程服务器并获取其正常运行时间并将其存储在一个临时文件中。

ssh 密钥交换已经完成,我可以在没有密码的情况下 ssh 到盒子上。 我知道该变量正在传递脚本,因为它确实回显了用户输入的内容。 而且我知道它会尝试使用 ssh 对远程主机执行某些操作,因为当我单击提交时页面会加载一段时间。

但是,当我查看临时文件时,什么都没有,所以 ssh 以某种方式失败但没有留下任何错误。

任何人都有通过 CGI bash 使用远程 ssh 的经验?

#!/bin/bash 
echo "Content-type: text/html"
echo '<html>'
echo '<head>'
echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">'
echo '</head>'
echo '<body>'

echo "<form method=GET action=\"${SCRIPT}\">"\
    '<table nowrap>'\
      '<tr><td>Input</TD><TD><input type="text" name="name" size=12></td>   </tr>'\
                '</table>'

echo '<br><input type="submit" value="Process Form">'\
   '<input type="reset" value="Reset"></form>'

NAME=`echo "$QUERY_STRING" | sed -n 's/^.*name=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"`

echo "NAME: " $NAME
ssh -o ConnectTimeout=3 -q $NAME uptime > /var/tmp/uptime
cat /var/tmp/uptime

【问题讨论】:

  • 内容类型和实际内容之间不需要空行吗?
  • 哦,我有,我刚刚删除了那行以节省帖子的空间:)

标签: bash cgi


【解决方案1】:

对于您的 ssh 命令,您使用的是 -q-o ConnectTimeout,因此如果连接超时,则不会打印错误消息。

如果您想调试该 ssh 命令,请执行以下操作

ssh -o ConnectTimeout=3 $NAME uptime > /var/tmp/uptime 2>&1

这样,如果 ssh 失败,您将在 /var/tmp/uptime 中看到错误消息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 2016-12-12
    相关资源
    最近更新 更多