2

そのため、C# を使用して、コマンドを実行し、かなり標準的な SSH 接続からデータを読み取る方法を見つけようとしています。唯一の課題は、問題のサーバーに直接接続できないことです。必要に応じて、一種のプロキシのような別の SSH 接続を経由する必要があります。

これまで、このためにさまざまな API を試してきました。SharpSSHなど。状況は次のとおりです。

私 -> SSH サーバー -> SSH ターゲット サーバー

入力したコマンドは、取得した結果に応じて慎重になるため、リアルタイムで実行および読み取りできる必要があります。

これまでのところ、私が得た最も近いものは、接続を完全に確立したことですが、ログインタイムアウトが終了する前にターゲットサーバーから情報を取得できません. 基本的には、「proxy」サーバーに接続してログインし、「ssh targetserver」を実行すると、全体が約 30 秒間静かになります。その時点で、一度に大量のデータを受信します。ターゲット サーバーからのログイン プロンプトと、ログインに時間がかかりすぎたというメッセージが表示されました。その後、ターゲット サーバーが接続を閉じたため、「プロキシ」サーバーが結果をフラッシュして、何が起こっているかを確認できました。

やみくもに正しい順序でコマンドを実行しようとしましたが、ターゲット サーバーに接続すると、API がコマンドの行を続行することを望まないようです。タイムアウトに達するまで、何もアクションを実行しません。

明確にするために。サーバーを変更することはできません。これがセットアップです。ただし、パテを介して手動で行うことはまったく問題ないため、それが可能であることは知っています。私の C# アプリケーションで、Putty がここで行っていることを再現しようとしています。Putty では、「ssh サーバー」と入力し、資格情報を入力して、別の「ssh サーバー」を実行するだけです。私がこれをやりたい理由は、単純に、やらなければならないルーチンワークがたくさんあるからです。同じものを何度も繰り返し、足し合わせるとかなりの時間がかかります。

これが API の問題なのか、それとも何かフラグがあるのか​​、またはこれを機能させるためにコマンドに入力できるものがあるのか​​どうかはわかりません。L などのフラグについて読んだことがありますが、私にとってはうまく機能していないようです。両方のサーバーは、ユーザー名とパスワードを Putty (またはその他のもの) に入力することで、ユーザーを認証します。

誰でもこれを行う方法を知っていますか? (できれば C# と SharpSSH を使用してください。)

Javaでもこれを試しましたが、まったく同じ問題が発生しました。

4

1 に答える 1

1

ServerAliveInterval 制限を増やしてみることができます。ssh でオプション -o ServerAliveInterval= を使用します。

また、ネストされた ssh とパスワードのない ssh には sshpass を使用できます。使用: sshpass -p 'password1' ssh -t username@host1 "sshpass -p 'password2' -t username@host2"

于 2014-12-18T06:45:40.103 に答える