2013-10-25 5 views
2

Я хочу, чтобы выполнить следующую команду из моей программы C:Запуск команды множественной SSH с помощью execl

SSH -t -t [email protected] «экспорт LINES = 40; экспорт COLUMNS = 124; экспорт TERM = Xterm, $ SHELL -i»0 < T_IN 1> t_out

Если я использую системный вызов, как в:

system("ssh -t -t [email protected] \"export LINES=40;export COLUMNS=124;export TERM=xterm;$SHELL -i\" 0<t_in 1>t_out"); 

, который работает отлично. Но мне нужно получить PID процесса SSH, поэтому мне нужно использовать 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", "[email protected]", "\"export LINES=40;export COLUMNS=124;export TERM=xterm;$SHELL -i\"", 0); 
    } else { 
    // not important here 
    } 

При выполнении этого он идет к SSH логин и после введения пароля я получаю ошибку:

Баш: экспорт LINES = 40; экспорт COLUMNS = 124; export TERM = xterm;/bin/bash -i: Нет такого файла или каталога. Подключение к 192.168.3.21 закрыто.

T_IN и t_out некоторые ФИФО (в названные трубы)

Мой вопрос: что должно быть правильно вызов функций имеют выполнить вышеуказанную команду. Thanks

ответ

0

Вы можете попробовать удалить скрытые двойные кавычки в аргументе команды ssh.

execlp("ssh", "ssh", "-t", "-t", "[email protected]", "export LINES=40;export COLUMNS=124;export TERM=xterm;$SHELL -i", 0); 

Они необходимы в версии «системы», потому что линия обрабатывается интерпретатором, но это не так в «execcp» версии.

+0

Правильно, я уже нашел это. Я хотел ответить, но мне пришлось ждать 8 часов. благодаря –

Смежные вопросы