Возможно ли, чтобы Perl запускал псевдонимы сценариев оболочки?

Asked
Viewd1307

0

Возможно ли, чтобы сценарий Perl запускал псевдонимы оболочки?Я столкнулся с ситуацией, когда у нас есть модуль Perl, для изменения которого у меня нет доступа, и одна из вещей, которые он выполняет, - это регистрация на нескольких серверах через SSH для удаленного выполнения некоторых команд.К сожалению, в некоторых системах (которые у меня также нет доступа для изменения) есть SSH-сервер с ошибками, который отключится, как только моя система попытается отправить открытый ключ SSH.У меня запущен агент SSH, потому что он нужен мне для подключения к другим серверам.

Мое первоначальное решение состояло в том, чтобы настроить псевдоним для установки ssh в ssh -o PubkeyAuthentication = no, но Perl запускает двоичный файл ssh, который он находит в PATH, вместо попытки использовать псевдоним.

Похоже, единственным решением является отключение агента SSH, пока я подключаюсь к проблемным серверам, или переопределение модуля Perl, который выполняет фактическое соединение.

4 ответов

3

Измените ПУТЬ перед запуском сценария perl или используйте его в своем .ssh / config

 Host *
  PubkeyAuthentication no
 
  • Я думаю, что это будет предпочтительный способ, если у вас есть определенные хосты, которые вызывают проблемы.Тогда вместо * вы можете поставить хост (или маску, соответствующую вашим проблемным хостам).Документация для ~ / .ssh / config находится в ssh_config (5).

    opello03 ноября 2009, 14:20
  • После того, как я кое-что поделал, я думаю, что вариант .ssh / config будет работать лучше.Я подключаюсь ко всем проблемным хостам через IP-адрес (мне сказали, что DNS в этом случае ненадежен - это совершенно другая проблема).Но к системам, которые работают, я подключаюсь, используя имя хоста.Итак, Host 10. * PubkeyAuthentication no должен решить проблему довольно хорошо.

    Kenny Drobnack03 ноября 2009, 16:29
5

Возможно, вы могли бы поместить команду с именем ssh в PATH перед ssh, которая запускает ssh, как вы хотите.

  • Отличная идея!Почему я не подумал об этом раньше?Во всяком случае, видимо великие умы думают одинаково - я получил два одинаковых ответа одновременно.

    Kenny Drobnack03 ноября 2009, 14:16
0

Вы можете объявить функцию в .bashrc (или .profile или что-то еще) с этим именем.Это может выглядеть так (может сломаться):

 function ssh {
  /usr/bin/ssh -o PubkeyAuthentication=no "[email protected]"
}
 

Но использование файла конфигурации может быть лучшим решением в вашем случае.

3

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

Мне пришлось сделать это недавно с iostat, потому что новая версия выводит другой формат, который сторонний продукт не может обработать (он сканировал вывод для создания отчета).

Я только что создал сценарий оболочки iostat, который вызвал реальный iostat (с жестко заданным путем, но вы могли бы быть более сложными), передав вывод через сценарий awk, чтобы преобразовать его в исходный формат.Затем я изменил путь для сторонней программы, и она начала нормально работать.