Linux 是否可以通过http创建适当的交互式shell?

Linux 是否可以通过http创建适当的交互式shell?,linux,Linux,我希望通过http拥有shell访问权限,以便与服务器上运行的程序交互(与SSH和其他协议相反)。我做了一些研究,发现了两种主要的方法,php方法,例如和CGI方法。尽管这些会在http上产生类似外壳的终端,但如果不在运行时传递参数,我无法与具有标准输入/输出的程序进行交互:/prog-options等等。 使用netcat上的标准shell,例如/prog,将提供完整的交互,以便提示输入等 我正在运行的测试程序是: #包括 #包括 包括 int main() { //设置关键字(密码) 查这个

我希望通过http拥有shell访问权限,以便与服务器上运行的程序交互(与SSH和其他协议相反)。我做了一些研究,发现了两种主要的方法,php方法,例如和CGI方法。尽管这些会在http上产生类似外壳的终端,但如果不在运行时传递参数,我无法与具有标准输入/输出的程序进行交互:
/prog-options等等。
使用netcat上的标准shell,例如
/prog
,将提供完整的交互,以便提示输入等

我正在运行的测试程序是:

#包括
#包括
包括
int main()
{
//设置关键字(密码)
查这个[14];
char表示[128];
//检查密码,如果不匹配则退出;
fgets(本,14,标准);
if(strncmp(这个“passwd\n”,14)){
出口(0);
}
printf(“shell交互成功!\n”);
fgets(即,128,stdin);
制度(即);;
出口(0);
}  
如果从netcat运行,则会发生以下情况:

./prog
passwd
Shell interaction success
如果通过http从其他类似shell的解决方案运行,我将访问accrss:

./prog
then nothing.

但愿有人知道怎么做

您可以这样做,但由于HTTP是一个无连接的请求-响应协议,它不会只使用一个HTTP连接

  • 浏览器会请求在远程服务器上启动shell
  • 将启动一个后端服务,创建所需的进程并捕获stdin/stdout管道
  • 浏览器上的Javascript会向服务器发送(可能是POST)一个请求,请求说“这个用户输入了一些字符”
  • 某种AJAX请求轮询循环将从后端进程获得新的输出,并将其显示在浏览器上

或者,使用流协议(由某些浏览器实现,但不是HTTP)可以大大简化此操作。

您可以这样做,但由于HTTP是无连接的请求-响应协议,因此它不会只使用一个HTTP连接

  • 浏览器会请求在远程服务器上启动shell
  • 将启动一个后端服务,创建所需的进程并捕获stdin/stdout管道
  • 浏览器上的Javascript会向服务器发送(可能是POST)一个请求,请求说“这个用户输入了一些字符”
  • 某种AJAX请求轮询循环将从后端进程获得新的输出,并将其显示在浏览器上

或者,使用流协议(由某些浏览器实现,但不是HTTP)可以大大简化这一过程。

注意:在Java或(上帝禁止)中实现这一点更为常见Flash作为WebSocket更易于配置和跨平台工作。@cWallenPole:我不鼓励使用Java或Flash。:)非常感谢您的回复。你知道有任何这样或接近实现这一点吗?我认为这超出了我的经验水平。@user1088793:我怀疑有上述的实现,但目前我不知道任何具体情况。好的,你认为这是一项非常复杂的编码工作吗?我正在考虑聘请一名自由职业者来做这件事,以防我找不到任何东西。请注意:用Java或(上帝禁止)Flash来做这件事更常见,因为WebSocket更容易配置和跨平台工作。@cWallenPole:我不喜欢鼓励使用Java或Flash。:)非常感谢您的回复。你知道有任何这样或接近实现这一点吗?我认为这超出了我的经验水平。@user1088793:我怀疑有上述的实现,但目前我不知道任何具体情况。好的,你认为这是一项非常复杂的编码工作吗?我正在考虑聘请一名自由职业者来做这件事,以防我找不到什么。