Команды SSH для Bash / Perl (от A до B до C) - PullRequest
0 голосов
/ 10 февраля 2011

Я запускаю командную оболочку bash на машине A, работающую через ssh и оболочку perl на машине B, запрашивающую через ssh результат команды на машину C. Я не могу получить результат, показанный в tty на машине A ...

Вот сводка нескольких тысяч строчных кодов:

1) командная оболочка "A" на машине "A": NOK

...  
ssh -p port userb@machineB "scriptB.pl"  
...  

2) perl scriptB.pl "на компьютере" B ": OK

...  
# my $user = qx|$ssh_cmd| if ($ssh_connection_ok);  
my $user = qx#$ssh_cmd# if ($ssh_connection_ok);  
...  

3) команда bash $ ssh_cmd на компьютере" C ": OK

cat /my_dir/my_file | grep this_user | head -n1 | cut -d: -f1 | tr  

Запуск в автономном режиме, step2 и step3 показывают ожидаемый результат, но запуск scriptB.pl с машины A не возвращает ожидаемые данные. Я не использую Net :: SSH2 в данный момент, но qx. Может бытьпроблема в настройке клиента ssh.

Спасибо в adv.

Ответы [ 2 ]

1 голос
/ 11 февраля 2011

Для тех, кто столкнется с той же проблемой:

Контекст на сервере A:

ssh user_foo@serverB "ssh user_bar@serverC"  

Чтобы заставить его работать в командной строке или в оболочке, агент ssh должен быть перенаправленНапример, используя опцию ssh «A» (см. справочную страницу ssh), например:

ssh -A user_foo@serverB "ssh user_bar@serverC"  
1 голос
/ 10 февраля 2011

Если сбой имеет значение, проверьте состояние выхода внешней программы.Чтобы получить статус выхода в $? - см. документацию perlvar - используйте $? >> 8 или WEXITSTATUS из модуля POSIX.

В вашем случае65280 соответствует состоянию выхода 255, и в соответствии с ssh руководством

ssh выходит со статусом выхода удаленной команды или с 255, еслипроизошла ошибка.

Я удивлен, что вы не видите какой-либо диагностики из неисправного ssh.Вы перенаправляете стандартную ошибку на /dev/null или она теряется в потоке других выходных данных?

Используете ли вы незашифрованные ключи ssh или аутентификацию rhosts?Вы пересылаете соединение своему агенту аутентификации (ForwardAgent в вашем ~/.ssh/config)?Для отладки вы можете отключить посредника и выполнить команду для хоста C непосредственно с хоста A?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...