私は、外部プロセスを開始して通信するために使用するC++クラスを持っています(QtのQProcessにいくらか似ています - 小さな組み込みシステムで作業しているのでQtを使用することはできません)。親プロセスと子プロセスの間のリンクを確立するためにpipeとdup2システムコールを使用します。問題は、ssh、scp、およびパスワードを要求する他のプログラムでは機能しません。私はsshをストライプしていて、/ dev/ttyを開き、何とかコマンドラインからパスワードを読むのに使っているようだ。私のクラスからパスワードを入力する方法や、appliactionがstdin以外のソースからの入力を期待していることを検出する方法はありますか(ポータブルである必要はありません)?C++でsshにパスワードをパイプするにはどうしたらいいですか?
8
A
答えて
7
sshプログラムでは、端末からパスワードを直接読み取るのが一般的です。擬似端末を割り当て、この擬似端末内でsshを実行して、このI/Oを捕捉する必要があります。 ptyマニュアルページ(セクション7、man 7 pty
)は良い紹介です。
私は、通常はsshにパスワードを与えたくないということを改めて述べたいと思います。多くのより良い認証オプションがあります。ユーザー入力なしで実行する必要のあるプロセスに対しては、公開鍵認証を使用します。
2
すでに実行しているプログラム、たとえばlftpを探します。
それとも、何をすべきかのアイデアを得るために、このPerlのワンライナーをstraceの:
perl -MNet::OpenSSH -e 'Net::OpenSSH->new(localhost, password => foo)'
それは主に、マスター・プロセスに仮想ttyのペアを割り当てフォークとのスレーブ設定部に減少しsshをexecする前の現行のttyとしての子のpty。
関連する問題
- 1. udpをsshでトンネルするにはどうしたらいいですか?
- 2. 変数にパイプを含めるにはどうしたらいいですか?
- 3. Jenkinsのパスワードをリセットするにはどうしたらいいですか?
- 4. パテ/ SSH:コマンドラインを戻すにはどうしたらいいですか?
- 5. パイプで2人の子供から親にデータを送るにはどうしたらいいですか?
- 6. 破損したパイプの後にソケットを再接続するにはどうしたらいいですか?
- 7. C#でトラックパッドにアクセスするにはどうしたらいいですか?
- 8. Pythonスクリプトからlinuxでユーザーのパスワードを設定するにはどうしたらいいですか?
- 9. LinuxのVirtualBoxにSSHをリモートでインストールするにはどうしたらいいですか?
- 10. リモートのssh接続でRプロットをローカルに作成するにはどうしたらいいですか?
- 11. C++でジェネレータを実装するにはどうしたらいいですか?
- 12. ssh設定ファイルからホストエントリを削除するにはどうしたらいいですか?
- 13. sshでリモートマシン上でアプリケーションを実行するにはどうしたらいいですか?
- 14. Linuxでgrepのパイプ出力を部分文字列化するにはどうしたらいいですか?
- 15. NetbeansでC++ユニットテストを行うにはどうしたらいいですか?
- 16. ssh経由で接続できるサーバーでWebブラウザを開くにはどうしたらいいですか?
- 17. DatagripのOSユーザーをSSH経由でPostgresに切り替えるにはどうしたらいいですか?
- 18. シェルをkillせずにcf sshセッションを終了するにはどうしたらいいですか?
- 19. C#Asp.Net 2.0 - アクティブディレクトリのパスワードに対してパスワードを確認するにはどうすればよいですか?
- 20. FirebaseでログインをIDとパスワードにするにはどうしたらいいですか?
- 21. ファイルから "su"コマンドにパスワードを渡すにはどうしたらいいですか?
- 22. PexpectでSSHトンネルの健全性を監視するにはどうしたらいいですか?
- 23. bashスクリプトのパスワードをaptitudeに渡してmysqlをインストールするにはどうしたらいいですか?
- 24. アカウントのsshログインを無効にするにはどうしたらいいですか?
- 25. C++ライブラリをインストールするにはどうしたらいいですか?
- 26. C#7のコードをコンパイルするにはどうしたらいいですか?
- 27. sshを使用してmysqlデータベースをエクスポートするにはどうしたらいいですか?
- 28. sshクライアントがsshサーバーから切断されたときに、ssh.netのタイムアウトを減らすにはどうしたらいいですか?
- 29. BlowfishでPerlでパスワードを暗号化するにはどうしたらいいですか?
- 30. groovyを使って、複数のシェルコマンドをパイプするにはどうしたらいいですか?
パスワードを送信したくないです。あなたがしたいのは、sshに〜/ .sshディレクトリの秘密鍵を読み込ませて利用させることです。 –
公開鍵認証を使うか、askpassとssh-agentを見てください – sehe
[sshpass](http://sourceforge.net/projects/sshpass /) – ephemient