Perl SSH к серверу и выполнение SQL-запроса - PullRequest
0 голосов
/ 16 октября 2019

Я делаю ssh на сервере, где sql был установлен, используя perl-модуль Net :: OpenSSH.

Здесь происходит соединение с ssh-сервером.

Вот как я ssh'ing на сервер:

my $ssh = Net::OpenSSH->new("$user:$passwd\@$host");
$ssh->error and die "Couldn't establish SSH connection: ". $ssh->error;

Но при подключении к серверу sql и выполнении запроса я получаю следующее сообщение.

**********************************************
* unixODBC - isql                            *
**********************************************
* Syntax                                     *
*                                            *
*      isql DSN [UID [PWD]] [options]        *
*                                            *
* Options                                    *
*                                            *
* -b         batch.(no prompting etc)        *
* -dx        delimit columns with x          *
* -x0xXX     delimit columns with XX, where  *
*            x is in hex, ie 0x09 is tab     *
* -w         wrap results in an HTML table   *
* -c         column names on first row.      *
*            (only used when -d)             *
* -mn        limit column display width to n *
* -v         verbose.                        *
* -lx        set locale to x                 *
* -q         wrap char fields in dquotes     *
* -3         Use ODBC 3 calls                *
* -n         Use new line processing         *
* -e         Use SQLExecDirect not Prepare   *
* -k         Use SQLDriverConnect            *
* --version  version                         *
*                                            *
* Commands                                   *
*                                            *
* help - list tables                         *
* help table - list columns in table         *
* help help - list all help options          * 
*                                            *
* Examples                                   *
*                                            *
*      isql WebDB MyID MyPWD -w < My.sql     *
*                                            *
*      Each line in My.sql must contain      *
*      exactly 1 SQL command except for the  *
*      last line which must be blank (unless *
*      -n option specified).                 *
*                                            *
* Please visit;                              *
*                                            *
*      http://www.unixodbc.org               *
*      nick@lurcher.org                      *
*      pharvey@codebydesign.com              *
********************************************** 

Мой код выглядит так:

$result = $ssh->capture("isql -SWebDB -UMyID -PMyPWD -w2222 < query.sql");
$ssh->error and warn "operation didn't complete successfully: ". $ssh->error;

, где query.sql Я поместил на удаленный сервер, где я делаю SSH.

Я думаю, отсутствует ли синтаксис внутри $ssh->capture(....); или у нас есть какая-либо другая функция в Net::OpenSSH для выполнения запросов SQL. Потому что через $ssh->capture(....);, если я передаю какие-либо сценарии или команды Unix (например, ls), все работает нормально. Так что я подозреваю, есть ли в Net::OpenSSH какие-либо функции для запуска SQL-запросов. Вам нужен вклад от вас, ребята.

1 Ответ

0 голосов
/ 16 октября 2019

Это похоже на экран, который будет отображаться программой, если вы попытаетесь запустить ее с недопустимыми аргументами командной строки. Это экран справки: «Не запускайте меня так - вот мои действительные параметры».

Вот ваша команда:

isql -SWebDB -UMyID -PMyPWD -w2222

А вот пример команды с экрана справки:

isql WebDB MyID MyPWD -w

Я не уверен, откуда вы взяли командную строку, но есть несколько отличий.

  • isql не имеет опции -S. Вместо этого вы просто указываете имя базы данных в качестве аргумента.
  • isql не имеет опции -U. Вместо этого вы просто указываете имя пользователя в качестве аргумента.
  • isql не имеет опции -P. Вместо этого вы просто указываете пароль в качестве аргумента.
  • isql имеет опцию -w, но не похоже, что она принимает аргумент. Это просто флаг включения / выключения.

Вам нужно изменить командную строку, чтобы она больше походила на примеры, приведенные в тексте справки.

Обновление: Но лучше всего использовать сетевые возможности isql. Запустите его на локальном сервере и подключитесь к серверу базы данных удаленно.

...