使用Cassia进行远程桌面连接的控制

 公司内主要走.net 路线 选择的服务器多数也是windows server系统

测试环境也不例外

windows多采用远程桌面连接(RDC)的方式进行管理维护,虽然方便,但是比起linux系统的权限控制,要差一些。

测试环境的机器 通常密码传的几乎人尽皆知

开发人员有时就会擅自登陆服务器 修改文件或者配置

导致测试环境与生产环境版本不一致

给测试带来很多问题 

而且远程桌面互相踢 也带来很大的不便

采用域控制配置起来也比较麻烦 

后来就想采用一种类似白名单的方式,只限制某些人可以远程连接

思路就是在服务端运行一个服务或者程序 不停的检查当前连接进来的远程登陆信息 根据白名单过滤登陆的机器名 如果不在名单内 就关闭连接

查了下资料 发现windows 确实提供相应的Win32API 可以进行远程连接的管理

https://msdn.microsoft.com/en-us/library/aa383494(v=vs.85).aspx

但是.net 程序调windowsAPI 写起来有点麻烦

就看看有没有人用c#封装过类似的轮子

发现还真的有

https://github.com/danports/cassia

封装之后的调用非常简单

提供了远程连接Session的各种状态、信息和控制

            string clientName = System.Environment.GetEnvironmentVariable("ClientName");


            string serverName = System.Environment.GetEnvironmentVariable("COMPUTERNAME");
            ITerminalServicesManager manager = new TerminalServicesManager();


            using (ITerminalServer server = manager.GetRemoteServer(serverName))
            {
                server.Open();
                foreach (ITerminalServicesSession session in server.GetSessions())
                {
                    NTAccount account = session.UserAccount;


                    if (account != null)
                    {
                        
                        if (mlist.Where(a => session.ClientName.Equals(a)).Count() == 0)
                        {
                            if (session.ConnectionState == ConnectionState.Active)
                            {
                                Console.WriteLine(DateTime.Now.ToString() + ":断开远程登陆用户 " + session.ClientName);
                                session.Disconnect();
                            }
                        }

                    }
                }
            }

效果非常不错

猜你喜欢

转载自www.cnblogs.com/testlover/p/9000246.html