SSH на другую виртуальную машину через Perl / Sh скрипт не работает. Работает вручную

$PATH — это (обычно — если только вы не переопределили его, но это сломало бы кучу вещей) список каталогов, разделенных двоеточиями. find принимает список каталогов, разделенных пробелами в командной строке:

find /path/to/dir1 /path/to/dir2 -name "$FILE.log"

Также обратите внимание, что одинарные кавычки препятствуют оценке переменных оболочкой, поэтому вам, вероятно, понадобятся двойные кавычки вокруг $FILE.log. , как указано выше.

Вы можете преобразовать $PATH в список, разделенный пробелами, несколькими способами, например:

 echo $PATH | sed 's/:/ /g'

и использовать подстановку команд, чтобы получить список в вашей команде поиска:

find $(echo $PATH | sed 's/:/ /g') -name "$FILE.log"
1
12.04.2016, 10:10
1 ответ

Когда вы вручную выполняете команду ssh, я предполагаю, что вы настроили ssh без пароля, а ~user/.ssh имеет необходимые ключи. При запуске через веб-страницу ssh выполняется как пользователь apache (или пользователь httpd), а ~apache/.ssh используется для ключей. У этого пользователя нет ssh без пароля, поэтому «Разрешение запрещено».

Вы просматриваете веб-страницу из 192.168.1.50, следовательно, это показано в ошибке.log и ошибка заключается в том, что ssh (работает на 192.168.1.20) не смог подключиться к 192.168.1.10, что правильно.

Различные способы исправить это :
- Дайте sudo доступ к apache, так что apache может выполнить ssh как ваш собственный пользователь:что-то вроде "sudo -u me -c 'ssh 192.168.1.10 'script1.sh'", где apache будет использовать sudo для переключения на вас и выполнения ssh.
- Сделайте apache с домашним каталогом на обоих хостах и настройте ssh без пароля для пользователя apache, и выполните все как apache.

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

2
27.01.2020, 23:48

Теги

Похожие вопросы