OSXターミナルでは、ターミナルがパスワード入力セッションを提供するため、SSHでサーバーに接続できます。
$ ssh user@server.com
user@server.com's password:
独自の端末実装を作りたかったので、
- 疑似端末を作成しました。
- フォーク
- pty スレーブを子プロセスの stdin にリダイレクトしました。
- 実行バッシュ。
ssh user@server.com
次に、文字列を親プロセスの pty master にプッシュします。しかし、プログラムによってこれを示しました。
$ ssh user@server.com
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,password).
パスワードセッションの代わりに。
私の問題は何ですか?どうすれば修正できますか?
PS私はexpect
ユーティリティを使用できることを知っています。これは、私自身の疑似シェル アプリケーションを実装するための単なる試行です。
後で参照するための更新
解決の鍵は、関数のforkpty()
代わりにposix_openpt()
関数を使用することでした。前者は大変面倒な作業をすべて処理し、双方向のマスターファイル番号を教えてくれます。ファイル番号から読み書きできます。そして、作成された pty デバイスは完全に機能します。SSH ログイン セッションは正常に機能します。対照的に、後者はまだ多くの作業が必要であり、その方法を理解することはできません。
forkpty
最後の 2 つのパラメーターを気にする必要がありました。アウトプットかと思ったらインプットだった。それがすべての問題の原因であり、それらを all に設定した後、NULL
現在はうまく機能しています。