如何通过网络完全控制终端?

时间:2013-02-10 20:45:24

标签: c linux terminal

有没有办法通过网络完全控制终端。例如,我有一个用C语言编写的服务器和客户端,我想向服务器发送一个命令,如rm filecd directory(服务器在这种情况下是一台Linux计算机)并获得终端输出给客户。我现在使用ls使用popen()但它无法更改目录或执行其他复杂命令。有没有更好的方法来执行此操作,可能使用fork() pipe()和其他函数来使用任何命令并从终端获取完整输出。

3 个答案:

答案 0 :(得分:1)

您要求的是由SSH完成的。

  

例如,我有一个用C编写的服务器和客户端,我想将一个命令如rm文件或cd目录发送到服务器(服务器在这种情况下是一台linux计算机)并将终端输出发送回客户端

我强烈反对自己实施这样的功能。可能性很高,你自己的方法会有几个安全问题。

SSH是远程终端的事实上的标准,具有强大的加密,经过实际测试的身份验证和强大的维护支持。还有很好的开源实现,比如OpenSSH。

答案 1 :(得分:0)

不确定您的确切设置是什么,但为什么不在远程端分叉shell?然后,您可以执行可以从命令行完成的任何操作。

如果可以选择真实的交互式连接,请查看pty(“伪ttys”)。这就是真正的终端应用程序的工作方式。

答案 2 :(得分:0)

如果你可以从ls获得输出,那么你就是在正确的道路上。

接下来就是能够发送输入,与输出没有太大区别。您可以使用命令cat检查您是否正确执行此操作,同时输入和输出。

然后,只需运行您最喜欢的shell命令,例如bash,您就可以将命令写入输入流并读取每个命令的输出。

请注意cd不是程序;它是一个shell命令,所以你必须为它运行一个shell来表示任何东西。重定向和你想要做的其他复杂性也是如此。

PS:请注意,这可能是一个严重的安全问题,您应该认真考虑已经制定的替代方案,例如ssh,正如其他人所说的那样。