使用execl运行多个ssh命令

时间:2013-10-25 19:11:31

标签: c linux ssh exec fork

我想从我的C程序中执行以下命令:

ssh -t -t root@192.168.3.21“export LINES = 40; export COLUMNS = 124; export TERM = xterm; $ SHELL -i”0< t_in 1>度T_out

如果我正在使用系统调用:

system("ssh -t -t root@192.168.3.21 \"export LINES=40;export COLUMNS=124;export TERM=xterm;$SHELL -i\" 0<t_in 1>t_out");

工作正常。但是我需要获得SSH进程的PID,所以我必须使用execlp。

到目前为止我尝试的是:

  pid = fork();
  if(pid == 0) {
     fd_in = open("td_in", O_RDWR | O_NONBLOCK);
     dup2(fd_in, 0);
     close(fd_in);
     fd_out = open("td_out", O_RDWR | O_NONBLOCK);
     dup2(fd_out, 1);
     close(fd_out);
     execlp("ssh", "ssh", "-t", "-t", "root@192.168.3.21", "\"export LINES=40;export COLUMNS=124;export TERM=xterm;$SHELL -i\"", 0); 
  } else {
     // not important here
  }

运行时它进入SSH登录,引入密码后我收到错误:

bash:export LINES = 40; export COLUMNS = 124; export TERM = xterm; / bin / bash -i:没有这样的文件或目录。 与192.168.3.21的连接已关闭。

t_in和t_out是一些fifo(命名管道)

我的问题是执行上述命令应该是正确的execlp调用。 感谢

1 个答案:

答案 0 :(得分:0)

您可以尝试删除ssh命令参数中的转义双引号。

execlp("ssh", "ssh", "-t", "-t", "root@192.168.3.21", "export LINES=40;export COLUMNS=124;export TERM=xterm;$SHELL -i", 0); 

在'system'版本中需要它们,因为该行由shell处理,但在'execcp'版本中不是这种情况。