LoginSignup
2

More than 5 years have passed since last update.

さくらレンタルサーバのDBにSSH経由でC#を使って接続する

Last updated at Posted at 2018-11-06

流れ

  • 公開鍵を作る
  • 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

参考サイト

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2