У меня есть доступ к машине под управлением SunOS 5.10 (называется солярис). У меня также есть доступ к машине RedHat (она называется redhat).
ssh -tt
кажется, не дает мне выходных данных, если работать от соляриса до соляриса, но работает как положено иначе. От редхата до соляриса:
redhat$ </dev/null ssh -tt solaris echo ged
ged
Connection to solaris closed.
От соляриса до редхата:
solaris$ </dev/null ssh -tt redhat echo ged
tcgetattr: No such device or address
ged
Connection to redhat closed.
От соляриса к солярису:
solaris$ </dev/null ssh -tt solaris echo ged
Connection to solaris closed.
Хм ... это выглядит так, как будто команда не запущена или вывод сброшен. От соляриса к солярису:
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
Обходным решением может быть получение PTY из Perl и использование этого:
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?