質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

Q&A

1回答

2471閲覧

【C#】ssh.netでのネゴシエーション設定が知りたい

kuwanoto

総合スコア14

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

0グッド

0クリップ

投稿2021/12/23 02:30

編集2021/12/23 03:26

VsualStudio2017 Expressで、C#を使って簡易的なSSHのクライアントを作成しています。
NugetでSSH.NET V2020.0.1を使用したところ、
ログイン、コマンド送信と応答受信はある程度期待通りに動くようになりました。
しかし、通信しているとエスケープシーケンスなどが応答に含まれるようです。
それに対応させるのは難しいため、もとから応答に含まれないようにしたいです。

Telnetの接続時にあるネゴシエーションのような、サーバー側からの要求に対し
WONTを返してターミナルタイプを変えるような方法と同様な方法で回避できるものでしょうか?

その場合はSSH.NETではどのように設定すれば実現できるでしょうか?
もしSSH.NETで変更できなければ、他に.netframeworkのライブラリで変更できるようなものはあったりしますか?
ご存じの方、よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/12/23 04:50

正規表現とかで除去するのではダメなんでしょうか。
kuwanoto

2021/12/23 05:43

自分が勉強不足なので、どのようなものが送られてくるかわかっていないのですが、 場合によっては、どうも先頭まで削除みたいなコマンドと一緒に送られてきたりするのです。 なぜかはわかりませんが、この辺は、ターミナルのサイズ設定とも関係していると思います。 その場合、ただコマンド部分だけを正規表現で見つけて削除しても、 削除するはずの文字列部分についても対応しないといけないので、おかしなことになり難しいのです。 そのため、どこまで対応する必要があるのかがわかっていないので、 通常の文字列だけ送信させるようネゴシエーションで変更するのが一番確実と思っています。 またサーバー側は、Teratermのようなちゃんとしたターミナルを前提に作られてるので、 初期設定を変えることもできないので困っています。
guest

回答1

0

実際に試したコードを出せませんか?

SSH.NETについては詳しくないので、これだけではどういう事をした時に問題が出たかが分かりません。
実際に試したコードが分かれば、その辺りを確認してもう少し具体的な回答ができるかもしれません。

以下は、SSHプロトコルから見た一般論です。

Telnetの接続時にあるネゴシエーションのような、サーバー側からの要求に対し
WONTを返してターミナルタイプを変えるような方法と同様な方法で回避できるものでしょうか?

サーバ側の情報がまったく無いので、これだけでは「サーバ次第」としか答えようが無いと思います。
ただ、サーバにTELNET接続して、サーバ側が送って来たDO TERMINAL-TYPEに対してWONTを返して端末タイプを送らなければ期待通りに動くという事が確認出来ているという事ならば、SSHではサーバ側から端末タイプを要求する事は無いので、クライアント側がpty-req channel requestを送らなければ端末タイプが相手に伝わらないので同じような効果が得られるかもしれません。
ただし、TELNET接続の場合はサーバ側でおそらく勝手にPTYが確保されますが、SSHでpty-req channel request を送らない場合はサーバ側でPTYが確保されない事になるのでその辺りで問題が出るかもしれません。

投稿2021/12/23 18:49

doda

総合スコア947

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問