ssh2_auth_pubkey_file Unable to open public key file
Пытаюсь из php подключиться по ssh.
Через терминал подключаюсь с использованием файлов ключей без проблем.
Из php подключиться не получается.
Мой код:
$sshConnection = ssh2_connect('xx.xxx.xxx.xxx', xxx); // вызов данной функции успешен
ssh2_auth_pubkey_file($sshConnection, 'root', 'keys/public.pub', 'keys/private');
Вызов ssh2_auth_pubkey_file() возвращает ошибку:
Warning: ssh2_auth_pubkey_file(): Authentication failed for umicms using public key: Unable to open public key file
Файлы ключей хранятся локально.
Пути указаны верно, через file_get_contents() можно их посмотреть.
Формат public-ключа следующий:
AAAAB3NzaC1yc2EAAAABJQAAAQEAxWKGsPt+LqwxHW0++XcbLeIxyqsoJK5MZv6h
DxDiEMLDM9lX2vX+Izyz3kakxXS37N8jutWRVHsTocMsP5uofI1E9ZlB2UgRx12F
BAEk+E6cuHtbsKzDO86j7SFfxU1ymYI4mgidYaBNvPTirqjVvzOSQ8sXUTIxdWes
ES+Nqjbqb7++yvOm4D2jyrNmdEmYuDRchLpqQq64+UMPjsknNnUw3UBVDBNsZdNi
6xSQDIxZEesrHH5CjatbNi5CDmwZu+XQEfaDoIJCb1FIoTo7NMs2rivEcoz6Okr4
pMpYVJa23/QNsX25h1ugTcCJoQrCecA0L0x4aD+sVNcPU98wzw==
Отсюда возникает 2 вопроса:
- Собственно, как побороть ошибку?
- Где должен располагаться public-ключ, можно ли его хранить локально, или нужно обязательно указывать адрес на сервере, к которому подключаюсь? (таким способом кстати тоже не работает, вылетает ошибка "Unable to open public key file")
Ответы (1 шт):
Автор решения: aleksandr barakin
→ Ссылка
- вообще публичная часть ключа для осуществления соединения по протоколу ssh не нужна: обе составляющие публичного ключа содержатся и внутри секретного ключа. зачем путь к публичному ключу передавать как обязательный параметр — оставим на совести разработчика этой функции.
- файлы с публичной (раз уж её так хочет разработчик) и секретной частью ключа должны располагаться на той же машине, где вы и запускаете процесс php. и, естественно, эти файлы должны быть доступны для чтения пользователю, от имени которого выполняется процесс php.
- путь к файлам лучше сразу указать абсолютный, так как текущий каталог (от которого «отсчитывается» относительный путь) у вас в процессе разработки (или при развёртке/переносе сайта) может и поменяться. впрочем, если в пути к файлам присутствует путь к домашнему каталогу пользователя, от имени которого выполняется процесс php, то, думаю, имеет смысл брать эту часть из переменной окружения
HOME. - на всякий случай дополню базовыми требованиями (это уже со стороны libssh): весь каталог
~/.ssh(и секретная часть ключа в особенности) должны быть доступны для чтения только владельцу. и именно ему и принадлежать.