Ejemplo n.º 1
0
        public static string PuttyArguments(HostInfo host, PuttyProfile profile, AuthenticationType authType)
        {
            // example: -ssh -load _stm_preset_ username@domainName -P 22 -pw password -D 5000 -L 44333:username.dyndns.org:44333

            string profileArg = "";

            if (profile != null)
            {
                profileArg = @" -load " + profile.Name;
            }

            var startShellOption = "";

            if (string.IsNullOrWhiteSpace(host.RemoteCommand))
            {
                startShellOption = " -N";
            }

            string args;

            switch (authType)
            {
            case AuthenticationType.None:
                args = String.Format(@"-ssh{0} {1}@{2} -P {3} -v{4}", profileArg, host.Username, host.Hostname,
                                     host.Port, startShellOption);
                Logger.Log.DebugFormat(@"plink.exe {0}", args);
                break;

            case AuthenticationType.Password:
                args = String.Format(@"-ssh{0} {1}@{2} -P {3} -pw {4} -v{5}", profileArg, host.Username, host.Hostname,
                                     host.Port, host.Password, startShellOption);
                Logger.Log.DebugFormat(@"plink.exe -ssh{0} {1}@{2} -P {3} -pw ******** -v -N", profileArg, host.Username,
                                       host.Hostname, host.Port);
                break;

            case AuthenticationType.PrivateKey:
                args = String.Format(@"-ssh{0} {1}@{2} -P {3} -i {4} -v{5}", profileArg, host.Username, host.Hostname,
                                     host.Port, PrivateKeysStorage.CreatePrivateKey(host).Filename, startShellOption);
                Logger.Log.DebugFormat(@"plink.exe {0}", args);
                break;

            default:
                throw new ArgumentOutOfRangeException("authType");
            }
            var sb = new StringBuilder(args);

            foreach (var tunnelArg in host.Tunnels.Select(tunnelArguments))
            {
                sb.Append(tunnelArg);
            }

            args = sb.ToString();
            return(args);
        }
Ejemplo n.º 2
0
        private static string psftpArguments(HostInfo host)
        {
            string args;

            switch (host.AuthType)
            {
            case AuthenticationType.Password:
                args = String.Format(@"{0}@{1} -P {2} -pw {3} -batch", host.Username, host.Hostname, host.Port,
                                     host.Password);
                break;

            case AuthenticationType.PrivateKey:
                args = String.Format(@"{0}@{1} -P {2} -i {3} -batch", host.Username, host.Hostname, host.Port,
                                     PrivateKeysStorage.CreatePrivateKey(host).Filename);
                break;

            default:
                throw new ArgumentOutOfRangeException("authType");
            }
            return(args);
        }
Ejemplo n.º 3
0
        public static string PuttyArguments(HostInfo host, PuttyProfile profile, AuthenticationType authType, bool addTunnels)
        {
            // example: -ssh -load _stm_preset_ username@domainName -P 22 -pw password -D 5000 -L 44333:username.dyndns.org:44333

            string profileArg = "";

            if (profile != null)
            {
                profileArg = @" -load " + profile.Name;
            }

            var startShellOption = "";

            if (string.IsNullOrWhiteSpace(host.RemoteCommand) && addTunnels)
            {
                startShellOption = " -N";
            }

            string args;

            switch (authType)
            {
            case AuthenticationType.None:
                args = String.Format(@"-ssh{0} {1}@{2} -P {3} -v{4}", profileArg, host.Username, host.CurrentHostAndPort.Hostname,
                                     host.CurrentHostAndPort.Port, startShellOption);
                //Logger.Log.DebugFormat(@"plink.exe {0}", args);
                break;

            case AuthenticationType.Password:
                args = String.Format(@"-ssh{0} {1}@{2} -P {3} -pw {4} -v{5}", profileArg, host.Username, host.CurrentHostAndPort.Hostname,
                                     host.CurrentHostAndPort.Port, host.Password, startShellOption);
                //Logger.Log.DebugFormat(@"plink.exe -ssh{0} {1}@{2} -P {3} -pw ******** -v -N", profileArg, host.Username,host.Hostname, host.Port);
                break;

            case AuthenticationType.PrivateKey:
                args = String.Format(@"-ssh{0} {1}@{2} -P {3} -i ""{4}"" -v{5}", profileArg, host.Username, host.CurrentHostAndPort.Hostname,
                                     host.CurrentHostAndPort.Port, PrivateKeysStorage.CreatePrivateKey(host).Filename, startShellOption);
                //Logger.Log.DebugFormat(@"plink.exe {0}", args);
                break;

            default:
                throw new ArgumentOutOfRangeException("authType");
            }

            if (addTunnels)
            {
                var sb = new StringBuilder(args);
                foreach (var tunnelArg in host.Tunnels.Select(tunnelArguments))
                {
                    sb.Append(tunnelArg);
                }

                args = sb.ToString();
            }

            Logger.Log.DebugFormat(@"plink.exe {0}", args.Replace("-pw " + host.Password + " ", "-pw ********* "));

            if (addTunnels && host.Tunnels.Any())
            {
                var ports     = host.Tunnels.Select(x => x.LocalPort).ToList();
                var ipGP      = IPGlobalProperties.GetIPGlobalProperties();
                var endpoints = ipGP.GetActiveTcpListeners();
                var portUsed  = endpoints.Select(x => x.Port.ToString()).Distinct().Where(x => ports.Contains(x)).ToList();
                if (portUsed.Any())
                {
                    var portsDetail = NetStatPortsAndProcessNames.GetNetStatPorts().ToLookup(x => x.port_number);
                    if (portUsed.Count == 1)
                    {
                        throw new Exception("La porta " + portUsed[0] + " è già in uso da '" + portsDetail[portUsed[0]].Select(p => p.process_name).FirstOrDefault() + "'.");
                    }
                    portUsed = portUsed.Select(x =>
                                               x + " (" + portsDetail[x].Select(p => p.process_name).FirstOrDefault() + ")").ToList();
                    throw new Exception("Le seguenti porto sono già in uso: " + string.Join(", ", portUsed));
                }
            }

            return(args);
        }