3

Немного предыстории:

Я пытаюсь взаимодействовать с данными, которые я сохранил в файлах Perl, с помощью программы, написанной на C, с использованием Win32 API. Программа на C находится в Windows, а файлы Perl доступны через подключенный сетевой диск в среде Unix. Я использую perlembed и успешно извлекаю нужные мне данные из файлов Perl, используя встроенный интерпретатор Perl и подпрограммы Perl, вызываемые из C.

Эта проблема:

Я должен запустить Perl-скрипты, которые уже есть на стороне Unix. Функция этих сценариев состоит в том, чтобы проверять синтаксис файлов Perl и вносить их в систему контроля версий, которую я использую. Скрипты вызывают некоторые специфичные для Unix команды, такие как pwd которые вызывают сбой программы на C, когда я использую system(perl perl_file) . Существует довольно много устаревшего кода на Perl, поэтому я не думаю, что смогу изменить какой-либо из сценариев проверки Perl, которые нужно вызвать.

Мой вопрос:

Как я могу выполнить сценарий Perl в среде Unix из программы C на стороне Windows? Я столкнулся с этим вопросом, предлагая использовать Cygwin, но это, кажется, просто еще одна среда между Unix и Windows. Я подумал, что может быть какой-то способ позволить программе C использовать оболочку C на подключенном сетевом диске для запуска сценария Perl, но я нигде не нашел примеров этого. Или, может быть, я мог бы заставить интерпретатор Perl в среде Unix запустить программу (используя строку shebang)? Я надеюсь, что это не глупый вопрос. Я просто сделал так много работы, чтобы иметь возможность манипулировать данными Unix Perl со стороны Windows, и это огорчает, что я не могу выполнить свою задачу, потому что не могу запустить скрипт Perl.

Спасибо!

1 ответ1

3

Если на Unix-сервере запущен ssh-сервер, вы можете настроить пару открытых и закрытых ключей в Windows и добавить открытый ключ в $HOME/.ssh/authorized_keys на Unix-сервере. Это должно позволить вашей программе Windows запускать команды ssh без ввода пароля.

В этот момент вы можете сделать что-то вроде этого в программе на C:

system("ssh user@host 'perl /path/to/script.pl'");

Я опускаю довольно много деталей ... вы хотите обратить внимание на безопасность учетной записи Windows, которая вызывает Perl-файл; чтобы запустить скрипт без ввода какого-либо пароля, вам нужно будет оставить пароль для ключа ssh пустым, но это означает, что вы хотите заблокировать закрытый ключ, чтобы никто другой не имел доступа к нему для чтения, в противном случае Ева будет запускать произвольный Perl-код на вашем Unix-сервере, и это никогда не будет хорошей вещью.

Для Windows SSH Client я рекомендую CopSSH; это один из нескольких портов Windows OpenSSH; он управляет парами ключей ssh более разумно, чем другие порты, которые я использовал.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .