【问题标题】:How to know if an SSH connection failed?如何知道 SSH 连接是否失败?
【发布时间】:2015-12-28 03:24:50
【问题描述】:

我必须在单独的进程中运行ssh 命令(因此通过execlp)才能将正在运行的机器连接到同一本地网络中的另一台机器。问题是,我必须确定输入的主机名有效,以便ssh 连接成功。

由于execlp 在成功的命令运行时替换了调用进程的图像(ssh 就是这种情况),据了解,在调用进程中无法知道ssh 连接建立成功。

因此,我能想到的解决这种不便行为的唯一方法是断言要连接的机器的给定主机名是有效的。我该怎么做/应该怎么做?

(有效的主机名只是一个存在并且当然可以访问的主机名,无论是 IP 地址还是别名)

【问题讨论】:

  • 定义“主机名有效”。这是否意味着它解析了 DNS 中的 A 记录? AAAA记录?两个都?如果用户在其.ssh/config 中有给定主机名的别名,是否应该考虑到这一点?系统级 SSH 配置怎么样?如果它只是一个 IP 需要它是有效的 IPv4 吗? IPv6?还是它也需要可访问?
  • 您的进程是在子进程中分叉并运行 ssh,还是仅在您知道 ssh 不会失败时才尝试执行 ssh(并结束您的原始程序)?
  • @AndrewMarshall 我编辑了 OP 消息。 @Dmitri 我 fork ssh (使用popen() because I need to write to ssh 的输入流)但我宁愿确保它不会事先失败;这个我省去了错误后的处理。
  • @darklion:为了省去所有管道设置,我使用popen() 运行ssh。所以是的,如果没有其他办法,我可能不得不走不那么懒惰的道路。但是我应该在 status waitpid() 集合中检查什么?

标签: c ssh execl


【解决方案1】:

为了省去所有管道设置,我使用 popen() 运行 ssh。所以是的,如果没有 否则,我可能不得不走不那么懒惰的道路。 … waitpid()

您不必走一条不那么懒惰的道路。 man popen:

pclose() 函数等待关联进程终止 和 返回wait4(2) 返回的命令的退出状态。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2023-02-10
    • 2016-10-08
    • 2016-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多