SherpSSHを使用してSSH接続を行う

訳あってC#からSSH経由でLinuxへ接続するアプリケーションを作成しているのですが、そのときに嵌ったところをメモします。

C#でSSHを使用する場合、いろいろな方法が考えられると思いますが私はSharpSSHを使用しています。今までも使用してきて特に不便を感じなかったので利用しているのですが、今回秘密鍵を使用した接続がどうしてもうまくいきませんでした。

具体的には以下のようなエラーがサーバ側のログに残っていました。

Received disconnect from (クライアントのIPアドレス): 3: Tamir.SharpSsh.jsch.JSchException:
UnknownHostKey: (サーバのIPアドレス). RSA key fingerprint is xx:xx:xx:xx:xx…
Tamir.SharpSsh.jsch.Session.connect(Int32 connectTimeout)
 

秘密鍵はputtyで生成したopenSSHに対応したもので、AndroidのConnectBotで使用していますが問題なく使用できています。従って、何か設定がおかしいのかと悩みました。

いろいろとGoogleで検索したところ、次のような回避策があることがわかりました。接続する前にセッションに対して設定します。

System.Collections.Hashtable hashConfig = new System.Collections.Hashtable();
hashConfig.Add("StrictHostKeyChecking", "no");
session.setConfig(hashConfig);
 

秘密鍵の認証を緩くするような設定のようです。詳細はこれから調査ですが、上記の設定を行うことで無事現象が回避できることを確認しました。

参考にしたサイト http://efreedom.com/Question/1-1579333/SSH-SFTP-Connection-Issue-Using-TamirSharpSsh