В терминале OSX я могу подключиться к серверу с помощью SSH, потому что терминал предлагает сеанс ввода пароля.
$ ssh [email protected]
[email protected]'s password:
Я хотел сделать свою собственную реализацию терминала, поэтому я
- создал псевдотерминал.
- вилка
- перенаправлен pty slave в стандартный ввод дочернего процесса.
- исполняемый баш.
А затем помещает строку ssh [email protected]
в мастер pty родительского процесса. Но по программе мне это показали.
$ ssh [email protected]
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,password).
вместо сеанса пароля.
В чем моя проблема и как ее исправить?
P.S. Я знаю, что могу использовать утилиту expect
. Это всего лишь пробная версия моего собственного псевдооболочки.
Обновление для дальнейшего использования
Ключом к решению было использование функции forkpty()
вместо функции posix_openpt()
. Первый выполняет всю тяжелую надоедливую работу и дает мне двунаправленный номер основного файла. Я могу читать и писать в номер файла. И созданное pty устройство отлично работает. Сеанс входа по SSH работает хорошо. В отличие от последнего, все еще нужно много работы, которую я никогда не могу понять, как.
Мне пришлось позаботиться о forkpty
последних двух параметрах. Я думал, что это вывод, но на самом деле это ввод. Это было источником всех проблем, и после установки их на все NULL
теперь все работает хорошо.