我有一台Linux机器,我在其中创建了一个cgi脚本(JarPatch.cgi),其代码如下所示:
#!/usr/bin/perl
use warnings;
print "Content-type: text/html\n\n";
system ("sh JarPatch.sh");
#!/bin/bash
echo "Inside jar patching tool";
PJS_DEV=app4915@slcai833.us.oracle.com;
ssh -f $PJS_DEV "cd /slot/ems4915/appmgr/tmp; echo stopping server ; ./find_stop_servers.sh;"
echo "Exit jar patching tool";
此脚本将基本关闭在远程计算机上运行的服务器
问题陈述是这样的: 当我通过Linux终端执行这个cgi脚本时。我可以看到ssh命令正在执行。服务器已关闭。
当我在浏览器中通过Windows机器访问cgi脚本时,会调用shell脚本,但ssh似乎无法正常工作。
任何人都可以给我一个指针来解决这个问题吗? 我是perl / shell集成的新手。因此可能会遗漏一些小事。 感谢
答案 0 :(得分:1)
从Windows机器上ssh时,所有连接都是以webuser身份进行的,无权将ssh连接到远程计算机。另一方面,当你从linux终端ssh时,你可以ssh作为用户有权这样做。这是因为linux用户在远程服务器上有ssh密钥。
您也可以尝试调查ProxyCommand
哪些可能会拯救,但我不知道它将如何与Windows一起使用。
其他方法是为webuser创建ssh密钥并将它们放入remomte服务器,这将带来安全风险。
答案 1 :(得分:0)
当您自己运行时ssh
提供验证密钥的密钥。当您通过Web服务器运行它时,Web服务器用户正在尝试运行ssh命令,并且没有提供您的ssh密钥,因此可能会提示您输入密码,而不是成功登录。
您可以通过为网络服务器用户生成ssh密钥并与目标系统共享该密钥来解决此问题,这至少可以说有一些安全隐患。