2009-04-20 3 views
2

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

Мой предшественник написал похожие сценарии с использованием rsh.

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

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

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

ответ

3

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

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

+0

Но ожидать также позволяет использовать telnet для удаленной системы, так я использую его сейчас, поэтому кажется, что он делает все, что делает rsh, и многое другое. Так почему я должен использовать rsh? –

+0

Пожалуйста, Боже, не будешь. К сожалению, telnet вызывает те же проблемы - как ваш пароль, блуждающий в вашем сеансе telnet в открытом виде. –

+0

true, я знал, что проблема безопасности возникнет, на самом деле одна из причин, по которой мне нравится ожидание perl, заключается в том, что я могу просто изменить начальную строку входа из telnet в SSH в ближайшее время, когда у меня есть это, и в этот момент моего сценария должен продолжать работать так, как было. Итак, в принципе вы не видите причины использовать rsh на этом этапе? –

2

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

+0

интересный, вроде вопреки тому, что я заключаю в комментариях к Чарли выше. Итак, что же касается проблемы sudo, мне нужно sudo для разных пользователей после логина и пароля для пароля снова, может ли это сделать rsh? –

+0

Я думаю, вы все еще смешиваете то, что делают разные вещи. rsh сделает все, что вы можете сделать в командной строке, так что да, вы можете отправить sudo на провод. ожидание может обрабатывать диалог через telnet, а также локально. Я не большой поклонник perl, поэтому я бы не наклонился к rsh, но даже лучше я подумал бы о чем-то более надежном. Тем не менее, это потребует больше узнать о задаче. –

+0

«Команда rsh sudo» работает нормально, если sudo настроен правильно. Трюк с sudo - это белый список тех команд, которые пользователю разрешено запускать (например, «пользовательская машина nopasswd start_thing, stop_thing, get_thing_status»), а не предоставлять доступ к пользовательскому карточному бланшу. –

4

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

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

$ rsh -l username hostname 

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

$ ssh [email protected] 

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

+0

Я считаю, что это не сработает с ожиданием «rsh -l username hostname», потому что acct, в котором мне нужно sudo into, не может использоваться как учетная запись, или есть что-то, что мне не хватает? –

+0

Извините, комментарий выше, я встретился, чтобы сказать, что не будет работать с RSH. –

+0

Хорошо. Вероятно, это не сработает. Но в этом случае я бы сказал, что использование sudo, вероятно, является окончательной политикой безопасности. Еще одна причина взглянуть на ssh. –

3

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

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

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

open my $fh, "|ssh [email protected] 'cat > /tmp/myscript'"; 
print $fh $script; 
system qw(ssh [email protected]), "chmod u+x /tmp/myscript; /tmp/myscript; rm /tmp/myscript"; 

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

+0

Это отличный ответ, +1 для этого. Только недостаток по сравнению с ожидаемым подходом, который вы выделяете в конце, заключается в том, что он не будет заботиться о вещах, которые требуют чего-то на целевом хосте, так как сценарий может включать эти части в локальный сценарий ожидания, но это означает, что каждый пункт назначения должен ожидать установки (или expect.pm). Правильно ли я понял ваш подход? –