はじめに
VB.netでSSH接続、ポートフォワーディングを行い接続する方法です。
VB.netの情報が少なくだいぶ遠回りをしてしまったため
需要があるかわかりませんが同じところで詰まる人がいた時のために記事にしようと思いました。
今年4月頃からプログラミングを始め、軽くHTMLやPHPの基本を勉強した程度で
個人開発中にVB.netに手を出したため効率の悪い書き方をしているかもしれません。
接続方法
「MySql.Data」と「SSH.NET」が必要になるので参照から追加してください。
SSH.NETの方は「NuGetパッケージの管理」から参照の検索欄で「ssh」と検索すれば一番上に出てくると思います。
追加が完了したらコードの一番上にImportsを追加して
接続に必要な変数も作成していきます。
Imports MySql.Data.MySqlClient
Imports Renci.SshNet
-------------------------------
Dim con As New MySqlConnection
Dim connectionInfo As New PasswordConnectionInfo("sakuraIP", 22, "userName", "sakuraPW")
Dim client As New SshClient(connectionInfo)
Dim forward As New ForwardedPortLocal("127.0.0.1", 13306, "dbHost", 3306)
Dim Builder = New MySqlConnectionStringBuilder()
Builder.Server = "127.0.0.1"
Builder.Port = 13306
Builder.UserID = "userName"
Builder.Password = "dbPW"
Builder.Database = "dbName"
Builder.SslMode = MySqlSslMode.None
sakuraIP:さくらサーバーのIPv4アドレス(さくらコントロールパネルから確認可)
userName:hoge.sakura.ne.jpならhoge
sakuraPW:コントロールパネル接続時のパスワード
dbHost:mysql9999.db.sakura.ne.jp みたいなやつ
dbPW:データベース作成時に設定したパスワード
dbName:接続したいデータベース名
13306の部分は使用していないポートなら何でも大丈夫だと思います。
ここまで完了したら後は下記コードで接続、切断可能です。
'SSH接続
client.Connect()
'ポートフォワーディング
client.AddForwardedPort(forward)
forward.Start()
'sakuraDB接続
con.ConnectionString = Builder.ToString()
con.Open()
'切断
con.Close()
forward.Stop()
client.Disconnect()
これでVB.netからさくらのレンタルサーバーにアクセスして
SQL文を実行することができます。
接続用クラス作成
クラス呼び出すだけで接続できます。
全コード
Imports MySql.Data.MySqlClient
Imports Renci.SshNet
Public Class SakuraServer
Private con As New MySqlConnection
Private connectionInfo As New PasswordConnectionInfo("sakuraIP", 22, "userName", "sakuraPW")
Private client As New SshClient(connectionInfo)
Private forward As New ForwardedPortLocal("127.0.0.1", 13306, "dbName", 3306)
Private Function SakuraMysql() As String
Dim Builder = New MySqlConnectionStringBuilder()
Builder.Server = "127.0.0.1"
Builder.Port = 13306
Builder.UserID = "userName"
Builder.Password = "dbPW"
Builder.Database = "dbName"
Builder.SslMode = MySqlSslMode.None
Return Builder.ToString()
End Function
Public Sub New()
Try
'接続
client.Connect()
client.AddForwardedPort(forward)
forward.Start()
con.ConnectionString = SakuraMysql()
con.Open()
Catch ex As Exception
'接続失敗時の処理
Console.WriteLine(ex)
End Try
End Sub
Public Sub close()
con.Close()
forward.Stop()
client.Disconnect()
End Sub
End Class
使用例
userテーブルからユーザー名で絞り込んで削除を行う場合
接続用クラス内に下記コードを追加する。
Public Sub deleteUser(a As String)
Dim del As String = $"DELETE FROM user WHERE user_name = '{a}'"
Dim delcommand As New MySqlCommand(del, con)
delcommand.ExecuteNonQuery()
End Sub
用意したDELETE文を実行したい場合は
'サーバー接続
Dim sakura As New SakuraServer
'DELETE文実行
sakura.deleteUser("ほげ太郎")
'切断
sakura.close()
こんな感じで使用できます。
今回のコードだとユーザー名「ほげ太郎」君を削除できます。
便利!
参考記事