gpt4 book ai didi

c - 使用 execl 运行多个 ssh 命令

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:09:57 37 4
gpt4 key购买 nike

我想从我的 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 调用应该是什么。谢谢

最佳答案

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

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

它们在“系统”版本中是必需的,因为该行由 shell 处理,但在“execcp”版本中并非如此。

关于c - 使用 execl 运行多个 ssh 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19597682/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com