Perl Net :: SSH :: Perl не загружает переменные моей среды против подключения через SSH - PullRequest
1 голос
/ 08 сентября 2010

Моя проблема связана с подключением через Net :: SSH :: Perl против подключения через SSH.мои переменные оболочки (команда: экспорт) не совпадают.

Этот факт не позволяет мне выполнить скрипт пользователя, который зависит от оболочки env vars.

Например:

если я выполняю через perl (Net :: SSH :: Perl) команду: «export», я получаю:

MAIL=/var/mail/username
PATH=/usr/local/bin:/bin:/usr/bin
PWD=/username
SHELL=/bin/ksh
SSH_CLIENT='myIPAddress 1022 22'
SSH_CONNECTION='myIPAddress 1022 remoteIPAddress 22'
USER=myusername

, выполняя ту же команду через обычное соединение ssh, я получаю 42 строки ENV VARS.

Другой пример:

если я выполню через perl (Net :: SSH :: Perl) команду: "tty", я получу:

not a tty

при выполненииту же команду через обычное соединение ssh я получаю:

/dev/pts/3

Что мне здесь не хватает?

Ответы [ 2 ]

1 голос
/ 09 сентября 2010

Chas, это не будет работать, так как Net :: SSH :: Perl (и в этом отношении большинство других клиентов Perl SSH) выполняет каждую команду в новом сеансе оболочки, и поэтому побочные эффекты не сохраняются между командами.

Решение состоит в том, чтобы объединить обе команды следующим образом:

$ssh->cmd(". ~/.bashrc && $cmd");
1 голос
/ 08 сентября 2010

Для переменных среды это звучит так, как будто ~/.bashrc не получен.Вы должны быть в состоянии получить его самостоятельно:

$ssh->cmd(". ~/.bashrc");

Для терминала выделение pty не требуется для многих задач, поэтому обычно это не делается для неинтерактивныхснаряды;тем не менее, вы можете передать параметр use_pty при создании объекта ssh и указать ему создать pty.

из Net::SSH::Perl документации :

use_pty

Установите это значение на 1, если вы хотите запросить псевдотерминал на удаленном компьютере.Это действительно полезно, только если вы устанавливаете соединение оболочки (см. Метод оболочки ниже);и в этом случае, если вы явно не отклонили pty (установив для use_pty значение 0), для него будет автоматически установлено значение 1. Другими словами, вам, вероятно, не понадобится использовать это часто.

По умолчанию 1, если вы запускаете оболочку, и 0 в противном случае.

...