Каковы преимущества rsh по сравнению с Perl Expect.pm?

У меня есть сценарий Perl Expect.pm, который выполняет некоторые довольно сложные вещи, такие как упаковка приложений, развертывание приложения, проверка журналов и т. Д. На нескольких удаленных хостах Unix.

Мой предшественник написал подобные скрипты, используя rsh.

Есть ли лучший подход между двумя? Или я должен использовать что-то все вместе другое?

Я предполагаю, что кто-то поднимет SSH; это в основном замена rsh, верно? К сожалению, сейчас SSH для меня не вариант.

Еще одна вещь, которую я должен добавить, это то, что после входа в систему мне нужно иметь возможность SUDO для конкретного пользователя, чтобы выполнять большинство действий на удаленных хостах.

4 ответа

Еще одна вещь, которую я должен добавить, это то, что после входа в систему мне нужно иметь возможность SUDO для конкретного пользователя, чтобы выполнять большинство действий на удаленных хостах.

Для решения этой конкретной проблемы: использование rsh (или же ssh) вы можете указать, каким пользователем стать в удаленном сеансе:

$ rsh -l username hostname

Там нет необходимости использовать sudo в этом случае. Сейчас, безусловно, настало время изучить ssh из-за проблем безопасности. Синтаксис тот же, но ssh также допускает немного другой (и я бы сказал лучше) синтаксис:

$ ssh username@hostname

я нашел expect быть слишком привередливым, но мой опыт с этим не существенен.

Они делают разные вещи. Expect - это способ написания сценариев, которые иначе были бы ручными ответами. rsh - удаленная оболочка, не ограниченная оболочка, неудачное столкновение имен - позволяет удаленно запускать команды в другой системе.

Тем не менее, дыры в безопасности и другие недостатки использования rsh для выполнения удаленных команд, запуска sudo и т. Д. Огромны.

Я вижу несколько способов сделать это:

  • Ожидайте через telnet, rsh или ssh
    • плюсы: одно соединение, меньше проблем с выходом
    • минусы: хрупкость в меняющейся среде
  • rsh/ssh каждая команда в отдельности
    • плюсы: меньше проблем, более надежных в изменяющейся среде
    • минусы: каждое соединение требует времени для аутентификации, и, для ssh, рукопожатие шифрования
  • rsh/ssh все команды одновременно
    • плюсы: одиночное соединение (меньше накладных расходов), более надежное, чем ожидалось
    • минусы: хрупкость в обслуживании, особенно когда вы получаете больше, чем несколько операторов, проблемы с выходом более распространены (экранирование в perl, так что по-прежнему избегается rsh/ssh, так что по-прежнему экранируется удаленной оболочкой, чтобы правильно обрабатываться удаленной оболочкой sudo'd?)
  • rsh/ssh и запустите скрипт
    • плюсы: единое соединение, надежнее, удобнее в обслуживании
    • минусы: найти способ получить его там (rcp/scp работает, NFS работает, вам нужно определить лучший путь для вас).

Учитывая все обстоятельства, это самый незначительный недостаток, так как вы можете просто сделать что-то вроде

 open my $fh, "|ssh user@host 'cat > /tmp/myscript'";
 print $fh $script;
 system qw(ssh user@host), "chmod u+x /tmp/myscript; /tmp/myscript; rm /tmp/myscript";

Конечно, вы бы добавили некоторую обработку ошибок (не удалось открыть, что, если /tmp/myscript существует и т. Д.), Но это идея.

Учитывая выбор между rsh а также telnet с помощью expectЯ бы выбрал rsh, Expect сценарии хрупкие. Все, что нужно, чтобы сломать кого-то, это кто-то меняет значение PS1 на удаленной машине. С помощью rsh также готовит вас к тому дню, когда вы наконец войдете в 90-е и начнете использовать ssh (так как вы можете в основном просто изменить rcp в scp а также rsh в ssh и все еще работает).

Другие вопросы по тегам