##流れ
- 公開鍵を作る
- Renci.SshNet.dllを使ってポートフォワード
- データベース接続
##公開鍵を作る
TeraTermでさくらに接続。~/.sshに作るのが良いらしいので下記のようにした。
$ mkdir ~/.ssh
$ cd ~/.ssh
$ ssh-keygen -t rsa
パスワードを聞かれるのでお好きなパスワードを入力。
下記ファイルが作成される。
- id_rsa・・・秘密鍵
- id_rsa_pub・・・公開鍵
公開鍵の名前を変更。あと、オーナーだけが変更できるように権限を変更。
$ mv id_rsa_pub authorized_keys
$ chmod 600 authorized_keys
秘密鍵(id_rsa)はクライアント側で使うので、適当なFTPアプリでダウンロードする。サーバ側のid_rsaは削除。
##Renci.SshNet.dllを使ってポートフォワード
C#でゴリゴリ書く。
// keyFile:ダウンロードしたid_rsaの物理ファイルパス
// sshPasswd:「パスワードを聞かれるのでお好きなパスワード入力」で入力したパスワード
var pkfile = new PrivateKeyFile(keyFile, sshPasswd);
// さくらのホスト名(xxxxx.sakura.ne.jp)
string host = "xxxxx.sakura.ne.jp";
// user:さくらのユーザ名(xxxxx)
string user = "xxxxx";
var sshClient = new SshClient(host, 22, user, pkfile);
// ここで例外エラーが起こらなければSSH接続はOK
sshClient.Connect();
uint dbPort = 3306;
uint localPort = 3306;
// さくらのサーバコントロールパネル-データベース一覧の「データベースサーバ」を設定
string serverName = "yyyyy.db.sakura.ne.jp";
var sshForward = new ForwardedPortLocal("127.0.0.1", localPort, serverName, dbPort);
sshClient.AddForwardedPort(sshForward);
sshForward.Start();
##データベースに接続する
接続文字列は下記の通り。Pooling=Falseをつけてないと再接続が遅くなることがあるらしいのでとりあえずつけておく。
DB名:さくらのサーバコントロールパネル-データベース一覧の「データベース名」
ユーザID:さくらのユーザ名(xxxxx)
パスワード:さくらでDBを作成したときに入力したパスワード
server=127.0.0.1;database=DB名;Uid=ユーザID;Pwd=パスワード;Port=3306;Pooling=False