ssh2_exec () не изменяет каталог с "cd"

У меня проблема с ssh_exec() отказывающимся выполнить команду «cd».

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

Мой код выглядит следующим образом:

 $str = ssh2_exec($sshStream, 'cp /var/www/compressed.tar.gz /var/www/vhosts/demo-domain1.com/httpdocs/'); $errstr = ssh2_fetch_stream($str, SSH2_STREAM_STDERR); stream_set_blocking($str, true); stream_set_blocking($errstr, true); echo "Output: " . stream_get_contents($str); echo "Error: " . stream_get_contents($errstr); $str = ssh2_exec($sshStream, 'cd /var/www/vhosts/demo-domain1.com/httpdocs/'); $errstr = ssh2_fetch_stream($str, SSH2_STREAM_STDERR); stream_set_blocking($str, true); stream_set_blocking($errstr, true); echo "Output: " . stream_get_contents($str); echo "Error: " . stream_get_contents($errstr); $str = ssh2_exec($sshStream, 'tar xzf c-class.tar.gz'); $errstr = ssh2_fetch_stream($str, SSH2_STREAM_STDERR); stream_set_blocking($str, true); stream_set_blocking($errstr, true); echo "Output: " . stream_get_contents($str); echo "Error: " . stream_get_contents($errstr); 

Я зарегистрирован как root.

Первая команда выполняется правильно и копирует файл в указанное место. Вторая команда не выполняется, но не выводит ошибок. Третья команда отображает ошибку (очевидно, поскольку предыдущая команда cd не работает).

Я знаю, что это не изменило dirs, так как когда я выполняю «pwd», он возвращается, говоря, что он находится в корневом каталоге.

Как уже упоминалось ранее, если я запускаю команды из оболочки, они выполняются отлично, поэтому я уверен, что мой синтаксис верен на 99.9%.

Это выделенный сервер, предоставляемый 1 и 1, запущенный CentOS и Plesk 9.

Для выполнения ssh2_exec() PHP запускает процесс, который будет выполнять ssh выполняемый на удаленном сервере.

Процесс оболочки, созданный удаленно, имеет свою собственную среду, включая текущий рабочий каталог.
Команда cd изменит рабочий каталог shell которая была запущена вашей второй командой.

Когда эта вторая команда заканчивается, оболочка умирает вместе с ней. Наряду с рабочей информацией.

Другими словами, среда командной оболочки командной строки не будет запоминаться во время выполнения команды n + 1 .

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

  $str = ssh2_exec($sshStream, 'cd /var/www/vhosts/demo-domain1.com/httpdocs/;' . 'tar xzf c-class.tar.gz'); $errstr = ssh2_fetch_stream($str, SSH2_STREAM_STDERR); stream_set_blocking($str, true); stream_set_blocking($errstr, true); echo "Output: " . stream_get_contents($str); echo "Error: " . stream_get_contents($errstr);