0

来自 sshpass邮件列表(以及堆栈溢出)的问题。SSHpass 在 HP-UX 上不起作用。

查看 truss 输出,我看到以下内容:

-u [/tmp/sshpass][14066]{3783827} fork() ................... (returning as child ...) ......... = 14064 {3783821}

子进程为 14066。

-u [/tmp/sshpass][14066]{3783827} setpgrp3(2)................................................. [entry]
-u [/tmp/sshpass][14066]{3783827} setpgrp3(2)................................................. = 14066

开始一个新的会话,与之前的 TTY 断开连接

-u [/tmp/sshpass][14066]{3783827} open(0x400132d0, O_RDWR, 01210)............................. [entry]
-u [/tmp/sshpass][14066]{3783827} open("/dev/pts/5", O_RDWR, 01210)........................... = 6

使用标志 O_RDWR 打开 /dev/pts/5。根据 Posix,此时 pts/5 应该成为新进程的控制终端。这显然不会发生。

用于打开的 HP-UX 手册页建议打开 /dev/pts/5 应该使该进程采用它作为其新的控制 TTY。我不知道为什么没有发生这种情况,也无法访问 HP-UX 系统进行实验。

4

1 回答 1

0

系统的人实际上必须去惠普的支持部门才能得到答案,但既然我们现在有了答案,我会在这里发布。

从 HPUX termios(7)手册页:

控制终端在 fork() 期间由子进程继承(请参阅 fork(2))。如果进程使用 setsid() 或 setpgrp() 创建新会话(请参阅 setsid(2) 和 setpgrp(2)),或者当与控制终端关联的所有文件描述符都已关闭时,进程将放弃其控制终端。

(强调补充)。

据我所知,粗体部分是 HPUX 特性,既不是 Posix 的一部分,也不是其他 Unix 平台的一部分。

问题是 sshpass 打开相关的 tty,并立即关闭文件描述符,因为它假定它已经设置为进程的控制 TTY。

由于 HPUX 特性,这意味着 TTY 成为进程的控制 TTY,并在关闭后立即停止。

于 2017-11-04T18:17:18.333 回答