Должностное лицо PHP ожидает сценарий с SCP затем SSH

Это не задание для find, с тех пор нет никакой включенной рекурсии.

for x in */C/populate.sh; do
  mkdir -- "${x%%/*}$suffix"
  mkdir -- "${x%%/*}$suffix/C"
  cp -p -- "$x" "./${x%%/*}$suffix/C"
done

Удалите -p опция к cp если Вы не хотите сохранять время изменения файлов.

Генерировать случайный суффикс, BSD/Linux mktemp является столь портативным, как это добирается.

suffix=$(mktemp -u tmp_XXXXX)

Если Вы хотите что-то неопределенно случайно выглядящее и совместимый POSIX, это дает строку, которая изменяется каждую секунду и варьируется от местоположения до местоположения; Вы не можете действительно добиться большего успеха только с инструментами POSIX:

suffix=$({ hostname; pwd; date; } |
         cksum | uuencode -m /dev/stdin | awk 'NR==2 {print substr($0,3,5)}')

При помещении этого кода в make-файл не забудьте:

  • удвойте все $ знаки;
  • поместите весь код одной строки, с помощью ; вместо этого для разделения инструкций по оболочке (можно использовать backslash+newline+tab для помещения разрыва строки в make-файл, но та последовательность удалена для создания команды оболочки);
  • запустите отрывок оболочки с set -e, так, чтобы это прервалось, если существует какая-либо ошибка.

1
31.12.2013, 18:32
2 ответа

Можно сделать это путем выполнения единственной команды SSH, но с расположением надлежащего соединения передачи данных, выполнения команды и управляющей логики трудно справиться.

Легче установить соединение SSH, сделать Вашу работу с любой смесью ssh, scp, sftp, rsync, sshfs, … подходит Вам, и наконец закройте соединение SSH.

SSH предлагает соединение, на котором могут осуществить контрейлерные перевозки другие процессы SSH: основное соединение. Запустите основное соединение и поддерживайте его в рабочем состоянии:

ssh -N -M

Передайте учетные данные как вход с, ожидают, так как необходимо обеспечить пароль. Затем выполните другие команды SSH как Вам нравится. Когда Вы больше не нуждаетесь в соединении, работаете ssh -O exit.

Чтобы гарантировать, что команды SSH будут ведомыми устройствами существующего основного соединения (и следовательно не потребуют никакой аутентификации), передайте то же ControlPath опция ко всем вызовам SSH. Любая передача это как параметр командной строки (-o ControlPath=…, отметьте нижний регистр), или определите его в ~/.ssh/config. Значение является путем, где ssh будет создавать или искать сокет, который позволяет ведомым устройствам и ведущему устройству связываться; это должно быть в перезаписываемом каталоге в файловой системе, которая поддерживает именованные сокеты, и имя должно быть уникальным для каждого соединения (таким образом, это должно включать целевой узел, порт и пользователя).

См. также Используя уже установленный канал SSH, и SSH легко копируют файл в локальную систему

1
27.01.2020, 23:53

Я думаю, что Ваш подход мог быть улучшен.

  1. Я настроил бы Ваши машины с общественностью/закрытыми ключами так, чтобы Вы могли ssh/scp, не имея необходимость входить в систему с паролем.
  2. Запишите сценарий для удаленного сервера, чтобы сделать следующее: файл Копии a) (если существует) к файлу резервной копии, копии с Вашего php сервера требуемый файл, перезапускает сервис и возвращает состояние
  3. Затем, когда Ваши выполнения php, это должно запустить скрипт, который просто запускает удаленный набор и возвращает результат Вашему Сценарию PHP.

Так Ваши удаленные получения по запросу файл и перезапуски сервис, Ваш php инициировал удаленный сценарий для выполнения.

0
27.01.2020, 23:53
  • 1
    Запрос пользователя для пароля является требованием, которое я не могу обойти, к сожалению. Я должен был указать это ранее. Что касается получения по запросу файла от удаленного конца, должно было бы все еще быть по крайней мере два соединения SSH, сделанные правом? –  David Kennedy 31.12.2013, 18:33

Теги

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