//拿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
836

被折叠的 条评论
为什么被折叠?



