Как мне из скрипта PHP scp файл с удаленного сервера?
я пытался shell_exec("scp remote:file dir")
но это не работает, потому что пользователь apaache
не имеет оболочки, связанной с удаленным сервером, и поэтому не может делать ssh.
Я пытался создать Copy.sh
скрипт setuid создан как user1
и использовать shell_exec("Copy.sh file dir")
, Однако сервер Apache (или PHP?) Не меняет идентификатор пользователя, когда Copy.sh
выполняется несмотря на флаг setuid.
Эта статья
https://serverfault.com/questions/7589/how-do-you-run-a-php-script-as-the-files-owner-rather-than-as-the-webserver-us
советы по установке suPHP
, который я, кажется, не установил. Это путь? я имею mod_suexec
установлен, но, похоже, этот модуль может изменять только uid самого скрипта PHP. Может быть (ab) делать то, что я хочу?
Возможно, есть способ предоставить ключи SSH user1
к сценарию PHP, так что он может сделать копию?
Вы можете указать в scp
какой удаленный пользователь должен использоваться для подключения:
scp someusername@remote:file dir
Если вы хотите запустить это как Apache-пользователь, вам нужно будет добавить PubKey of Apache к authorized_keys
файл из someusername
на пульте.
Если Apache-пользователь никогда ранее не подключался к удаленному через SSH, он может не доверять HostKey. Вы должны добавить его в known_hosts
файл пользователя, например, путем интерактивного (в оболочке) подключения к удаленному пользователю как Apache-user и ввода yes
когда спросили Или отключите проверки, используя StrictHostKeyChecking=no
Однако это имеет значение для безопасности.
Других решений пока нет …