Sunday 15 January 2012

C# SSH tunnel to MySQL server -



C# SSH tunnel to MySQL server -

i trying write simple programme connect mysql remote server can connected via ssh.

it reports ssh connects , port forwards states cannot connect of specified hosts?

have configured wrong?

below console output , code:

using system; using system.collections.generic; using system.text; using system.diagnostics; using system.io; using system.data; using system.web; using system.windows.forms; //add mysql library using mysql.data.entity; using mysql.data.mysqlclient; using mysql.data.types; // ssh using renci.sshnet; using renci.sshnet.common; namespace mysql_console { class mainclass { public static void main (string[] args) { passwordconnectioninfo connectioninfo = new passwordconnectioninfo ("mytestdb.co.uk", "root", "password123"); connectioninfo.timeout = timespan.fromseconds (30); using (var client = new sshclient(connectioninfo)) { seek { console.writeline ("trying ssh connection..."); client.connect(); if (client.isconnected) { console.writeline ("ssh connection active: {0}", client.connectioninfo.tostring()); } else { console.writeline ("ssh connection has failed: {0}", client.connectioninfo.tostring()); } console.writeline ("\r\ntrying port forwarding..."); var portfwld = new forwardedportlocal(convert.touint32(4479), "localhost", convert.touint32(3306)); client.addforwardedport(portfwld); portfwld.start(); if (portfwld.isstarted) { console.writeline ("port forwarded: {0}", portfwld.tostring()); } else { console.writeline ("port forwarding has failed."); } } grab (sshexception e) { console.writeline ("ssh client connection error: {0}", e.message); } grab (system.net.sockets.socketexception e) { console.writeline ("socket connection error: {0}", e.message); } } console.writeline ("\r\ntrying database connection..."); dbconnect dbconnect = new dbconnect ("localhost", "test_database", "root", "passwrod123", "4479"); var ct = dbconnect.count ("packages"); console.writeline (ct.tostring()); } } // mysql db class class dbconnect { private mysqlconnection connection; private string server; public string server { { homecoming this.server; } set { this.server = value; } } private string database; public string database { { homecoming this.database; } set { this.database = value; } } private string uid; public string uid { { homecoming this.server; } set { this.server = value; } } private string password; public string password { { homecoming this.password; } set { this.password = value; } } private string port; public string port { { homecoming this.port; } set { this.port = value; } } //constructor public dbconnect(string server, string database, string uid, string password, string port = "3306") { this.server = server; this.database = database; this.uid = uid; this.password = password; this.port = port; initialize(); } //initialize values private void initialize() { string connectionstring; connectionstring = "server=" + server + ";" + "database=" + database + ";" + "uid=" + uid + ";" + "password=" + password + ";"; connection = new mysqlconnection(connectionstring); } //open connection database private bool openconnection() { seek { connection.open(); console.writeline("mysql connected."); homecoming true; } grab (mysqlexception ex) { //when handling errors, can application's response based on error number. //the 2 mutual error numbers when connecting follows: //0: cannot connect server. //1045: invalid user name and/or password. switch (ex.number) { case 0: console.writeline("cannot connect server. contact administrator"); break; case 1045: console.writeline("invalid username/password, please seek again"); break; default: console.writeline("unhandled exception: {0}.", ex.message); break; } homecoming false; } } //close connection private bool closeconnection() { seek { connection.close(); homecoming true; } grab (mysqlexception ex) { console.writeline(ex.message); homecoming false; } } //insert statement public void insert() { string query = "insert tableinfo (name, age) values('john smith', '33')"; //open connection if (this.openconnection() == true) { //create command , assign query , connection constructor mysqlcommand cmd = new mysqlcommand(query, connection); //execute command cmd.executenonquery(); //close connection this.closeconnection(); } } //update statement public void update(string tablename, list<keyvaluepair<string, string>> setargs, list<keyvaluepair<string, string>> whereargs) { string query = "update tableinfo set name='joe', age='22' name='john smith'"; //open connection if (this.openconnection() == true) { //create mysql command mysqlcommand cmd = new mysqlcommand(); //assign query using commandtext cmd.commandtext = query; //assign connection using connection cmd.connection = connection; //execute query cmd.executenonquery(); //close connection this.closeconnection(); } } //delete statement public void delete(string tablename, list<keyvaluepair<string, string>> whereargs) { string query = "delete tableinfo name='john smith'"; if (this.openconnection() == true) { mysqlcommand cmd = new mysqlcommand(query, connection); cmd.executenonquery(); this.closeconnection(); } } //select statement public list<string> select(string querystring) { string query = querystring; //create list store result list<string> list = new list<string>(); //open connection if (this.openconnection() == true) { //create command mysqlcommand cmd = new mysqlcommand(query, connection); //create info reader , execute command mysqldatareader datareader = cmd.executereader(); //read info , store them in list int fieldcount = datareader.fieldcount; while (datareader.read()) { (int = 0; < fieldcount; i++) { list.add(datareader.getvalue(i).tostring()); } } //close info reader datareader.close(); //close connection this.closeconnection(); //return list displayed homecoming list; } homecoming list; } //count statement public int count(string tablename) { string query = "select count(*) " + tablename; int count = -1; //open connection if (this.openconnection() == true) { //create mysql command mysqlcommand cmd = new mysqlcommand(query, connection); //executescalar homecoming 1 value count = int.parse(cmd.executescalar()+""); //close connection this.closeconnection(); homecoming count; } homecoming count; } //backup public void backup() { seek { datetime time = datetime.now; int year = time.year; int month = time.month; int day = time.day; int hr = time.hour; int min = time.minute; int sec = time.second; int millisecond = time.millisecond; //save file c:\ current date filename string path; path = "c:\\" + year + "-" + month + "-" + day + "-" + hr + "-" + min + "-" + sec + "-" + millisecond + ".sql"; streamwriter file = new streamwriter(path); processstartinfo psi = new processstartinfo(); psi.filename = "mysqldump"; psi.redirectstandardinput = false; psi.redirectstandardoutput = true; psi.arguments = string.format(@"-u{0} -p{1} -h{2} {3}", uid, password, server, database); psi.useshellexecute = false; process process = process.start(psi); string output; output = process.standardoutput.readtoend(); file.writeline(output); process.waitforexit(); file.close(); process.close(); } grab (ioexception e) { console.writeline("error {0}, unable backup!", e.message); } } //restore public void restore() { seek { //read file c:\ string path; path = "c:\\mysqlbackup.sql"; streamreader file = new streamreader(path); string input = file.readtoend(); file.close(); processstartinfo psi = new processstartinfo(); psi.filename = "mysql"; psi.redirectstandardinput = true; psi.redirectstandardoutput = false; psi.arguments = string.format(@"-u{0} -p{1} -h{2} {3}", uid, password, server, database); psi.useshellexecute = false; process process = process.start(psi); process.standardinput.writeline(input); process.standardinput.close(); process.waitforexit(); process.close(); } grab (ioexception e) { console.writeline("error {0}, unable restore!", e.message); } } } }

try specifying 127.0.0.1 instead of localhost, or more ipaddress.loopback.tostring(). also, don't need explicitly cast uint32. should seek like:

var portfwld = new forwardedportlocal(4479, ipaddress.loopback.tostring(), 3306);

if doesn't work, seek specifying server name, like:

var portfwld = new forwardedportlocal(ipaddress.loopback.tostring(), 4479, "servername_goes_here", 3306);

c# mysql .net ssh

No comments:

Post a Comment