Solaris:ssh -tt 没有输出

Solaris:ssh -tt 没有输出

我可以使用运行 SunOS 5.10 的机器(称为 solaris)。我还可以使用 RedHat 机器(称为 redhat)。

ssh -tt如果从 solaris 运行到 solaris,似乎不会给我输出,但其他情况下可以按预期工作。从 redhat 运行到 solaris:

redhat$ </dev/null ssh -tt solaris echo ged
ged
Connection to solaris closed.

从 solaris 到 redhat:

solaris$ </dev/null ssh -tt redhat echo ged
tcgetattr: No such device or address
ged
Connection to redhat closed.

从 solaris 到 solaris:

solaris$ </dev/null ssh -tt solaris echo ged
Connection to solaris closed.

嗯...看起来好像命令没有运行或输出被删除了。从 solaris 到 solaris:

solaris$ rm -f /tmp/ged
solaris$ </dev/null ssh -tt solaris touch /tmp/ged
solaris$ ls -l /tmp/ged
-rw-r--r--   1 tange    other          0 Aug  8 07:02 /tmp/ged

因此命令显然已经运行;只是输出被删除了。

我如何获取 ssh 的输出?

背景

以上是 GNU Parallel 中的一个错误的本质,这也是为什么需要 </dev/null 和 -tt:

  • </dev/null 是因为我们并行运行多个命令,因此它们无法获取当前 tty。
  • 需要 -tt,因为否则 Ctrl-C 将无法远程工作。

更新

看来这是由于这个错误造成的:https://bugzilla.mindrot.org/show_bug.cgi?id=1199

一种解决方法似乎是从 Perl 获取 PTY 并使用它:

perl -MIO::Pty -e '$pty = new IO::Pty; print $t=$pty->ttyname(),"\n"; print `openssh-5.0p1/ssh -tt solaris.p echo foo < $t`'

不幸的是,IO:Pty 没有安装在 Solaris 5.10 上,它不仅是一个 Perl 包,而且还是一个 .xs 文件 - 因此它也需要一个 C 编译器;所以不是一个好的解决方案。

所以问题是:SunSSH 1.1 和 OpenSSH 5.0 能否解决这个问题 - 可能借助 Perl?

相关内容