gpt4 book ai didi

c - ssh使用expect登录使用c直接登录

转载 作者:行者123 更新时间:2023-11-30 19:32:17 24 4
gpt4 key购买 nike

我使用expect创建了一个c程序,使用ssh登录服务器,以下是程序

#include <sys/wait.h>
#include <tcl8.6/expect.h>
int main()
{
exp_is_debugging = 0;
exp_timeout = 60;


FILE *expect = exp_popen((char *) "ssh user@ip");
if (expect == 0) {
return 1;
}

enum { denied, invalid, command_not_found,
command_failed, prompt };

switch (exp_fexpectl(expect,
exp_glob, "password: ", prompt,
exp_end)) {
case prompt:
// continue
break;
case EXP_TIMEOUT:
return 1;
}

fprintf(expect, "%s\r","password");

switch (exp_fexpectl(expect,
exp_glob, "denied", denied, // 1 case
exp_glob, "invalid password", invalid, // another case
exp_glob, "#", prompt, // third case
exp_end)) {
case denied:
printf("denied %d",exp_glob);
break;
case invalid:
break;
case EXP_TIMEOUT:
printf("EXP_TIMEOUT");
break;
case prompt:
printf("loggedin");
break;
default:
//return 0;
break;
}
}

我能够登录到服务器,但此后它立即转到我的终端,我希望登录到服务器并需要与该终端进行交互。现在,它显示了我的终端,有人对此有任何想法吗?我需要留在该登录服务器的终端上

最佳答案

我在你的程序中没有看到任何循环。您只需要子进程 (ssh) 输出一些输出,进行相应的回复,最后终止。当您终止时,您的子进程也会终止。您必须在 stdin/stdout 和子进程之间无限期地转发 I/O 才能实现您想要的效果。

也就是说,这整个想法是有缺陷的。您只想启动 ssh 并自动完成登录,但要交互地使用 shell?无需为此编写代码,请查看 ssh-agent 以及如何创建 ssh key 。

关于c - ssh使用expect登录使用c直接登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47265245/

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