Каковы преимущества 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
и все еще работает).