C#通过SSH通道连接数据库

//拿mysql数据库举例子 需引用SSH.Net类

	private static string SSHHost = "215.22.11.12";        // SSH地址
    private static int SSHPort = 11121;              // SSH端口
    private static string SSHUser = "root";           // SSH用户名
    private static string SSHPassword = "2019<n`)H&q09";           // SSH密码
    
    private static string sqlHost = "10.168.7.142"; // 需要连接mysql的机器IP(ps:不能是域名,但可以把域名解析成ip地址放进来)也可以是内网IP 比如:192.168.1.20
    private static string sqlIPA = "127.0.0.1";// 把mysql的机器ip映射成自己的ip地址  实际上也可以写其它的 可以设成0.0.0.0 或者不设置
    private static uint sqlport = 3306;        // mysql数据库端口
    
    private static SshClient client;

    private static ForwardedPortLocal portFwdL;
    
    private static void Open(bool isTrans)
    {
		portFwdL = new ForwardedPortLocal(sqlIPA, 16997, sqlHost, sqlport); //映射到本地端口 第一个和第二个参数为把对方的地址和端口映射成自己的地址和端口 第三个和第四个为对方被映射的地址和端口
       	client.AddForwardedPort(portFwdL);
     	portFwdL.Start(); //开启映射(注意:如果报上下文无效 则为portFwdL 映射的参数设置有问题 大部分有可能为目标ip地址有问题)
      ...开始对数据库进行操作代码(注意:连接字符串需要设置成映射的地址和端口 ssh会通过你映射出来的地址和端口跳转到目标地址)
      portFwdL.close(); //关闭映射
      	注意:如果需要不断的对目标数据库进行操作则不能关闭映射 如果关闭再开启后conn.open();这个开启的数据库的方法则会报已经建立了连接通道的异常!
    }

最后的注意:如果项目多次重新部署 需要把16997ssh占用的端口给kill掉 因为没有close()释放掉所以端口会被一直占用 如果不kill掉 则数据库访问会抛错喔~!

Windows两步方法 :
1 查询端口占用
2 强行杀死进程(注意要以管理的身份来运行提示命令符(cmd)要不然会权限不足kill不死进程)
netstat -aon|findstr “16997” --查看 16997的pid
taskkill /pid 4136-t -f --然后把16997的4136的pid给kill掉
每次重新部署项目pid都会发生变化所以每次都要查看新的pid来kill

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值