S SH через / sbin / s sh не может прочитать RSA-Key-File (работает из консоли) - PullRequest
0 голосов
/ 24 февраля 2020

Я пытаюсь подключиться к серверу через S SH из своего приложения C ++ (и отправить команду выключения). Я проинформировал сервер о моем ключе S SH (обновлен авторизованные ключи на моем сервере Freenas на FreeBSD).

Следующая консольная команда работает мгновенно (Manjaro Linux console):

ssh -i /home/[uname]/.ssh/amd_freenas root@freenas.local poweroff

Я пытаюсь использовать следующую команду из моего кода C ++, чтобы сделать то же самое:

execl("/sbin/ssh", "ssh", "-i /home/[uname]/.ssh/amd_freenas", "root@192.168.178.48", "poweroff", (char*)NULL);

Когда вызывается из моей программы, вывод консоли постоянно говорит, что мой S SH -файл не существует, что не соответствует действительности, так как команда direct console также не имеет проблем (на рисунке показано сравнение, верхняя команда была из кода, нижняя была непосредственно в консоли). Вывод ошибки:

Warning: Identity file  /home/al/.ssh/amd_freenas not accessible: No such file or directory.

Я попытался изменить разрешения для файла (chmod 600), я попытался переместить его в другое место и прочитать его оттуда. Я понятия не имею, почему это не работает. Этот файл - мой личный ключ, так что это должно быть правильно. Может кто-нибудь помочь?

введите описание изображения здесь

1 Ответ

1 голос
/ 25 февраля 2020
execl("/sbin/ssh", "ssh", "-i /home/[uname]/.ssh/amd_freenas", ...

Warning: Identity file  /home/al/.ssh/amd_freenas not accessible
                      ^^

ssh интерпретирует пробел после -i как часть имени файла. Вы можете видеть, что в имени сообщения об ошибке есть лишний пробел перед именем файла ключа, потому что s sh считает, что имя имеет начальный пробел.

Вы должны указать параметр одним из следующих способов:

execl("/sbin/ssh", "ssh", "-i", "/home/[uname]/.ssh/amd_freenas", ...

или

execl("/sbin/ssh", "ssh", "-i/home/[uname]/.ssh/amd_freenas", ...
...