我缩进创建反向ssh tunnel / ssh端口转发机制。
这是实际的反向ssh命令:
ssh -fN -R 101:localhost:22 computer@123.123.0.27 -p 2320
我需要使用popen()从我的C api运行此命令,我的实现方式如下。
注意:系统的公共&私钥已经共享,即无需提供密码。
int create_tunnel (void)
{
FILE *fptr_ssh = NULL;
char sshcmd[100] = {0};
char response[100] = {0};
sprintf(sshcmd, "ssh -fN -R 101:localhost:22 computer@123.123.0.27 -p 2320");
fptr_ssh = popen(sshcmd, "r"); /* Executing ssh */
if(NULL == fptr_ssh) {
perror("popen failed");
return -1;
}
/* Getting message from fp */
if(!fgets(response, (sizeof(response)-1), fptr_ssh)) {
perror("fgets failed");
return -1;
}
printf("Msg: %s\n", response);
pclose(fptr_ssh);
return 0;
}
成功案例:如果一切顺利,端口转发将成功没问题。
在失败案例中:考虑以下示例: 如果没有连接后续消息将显示在stdout(终端)中。
ssh: connect to host 123.123.0.27 port 2320: Network is unreachable
但我无法从文件指针fptr_ssh中获取C api / fgets()中的任何信息。
它返回成功,没有来自fgets的消息。
fgets failed: Success