Exemplo n.º 1
0
        private SysDiag.ProcessStartInfo CreatePlinkProcessStartInfo(
                string smuxiHostname, int smuxiPort, int remotingPort,
                string sshProgram, string sshUsername,
                string sshPassword, string sshKeyfile,
                string sshHostname, int sshPort)
        {
            Trace.Call(sshProgram, sshUsername, "XXX", sshKeyfile, sshHostname, sshPort);

            string sshArguments = String.Empty;

            // don't ask for SSH key fingerprints
            // TOO NASTY!
            //sshArguments += " -auto_store_key_in_cache";

            // no interactive mode please
            sshArguments += " -batch";
            // don't execute a remote command
            sshArguments += " -N";

            // HACK: force SSH to always flush the send buffer, as needed by
            // .NET remoting just like the X11 protocol
            sshArguments += " -X";

            if (String.IsNullOrEmpty(sshUsername)) {
                throw new ApplicationException(_("PuTTY / Plink requeries a username to be set."));
            }
            sshArguments += String.Format(" -l {0}", sshUsername);

            if (!String.IsNullOrEmpty(sshPassword)) {
                sshArguments += String.Format(" -pw {0}", sshPassword);
            }

            if (sshPort != -1) {
                sshArguments += String.Format(" -P {0}", sshPort);
            }

            // ssh tunnel
            sshArguments += String.Format(" -L 127.0.0.1:{0}:{1}:{2}", smuxiPort, smuxiHostname, smuxiPort);

            // ssh back tunnel
            sshArguments += String.Format(" -R {0}:127.0.0.1:{1}", remotingPort, remotingPort);

            // ssh host
            sshArguments += String.Format(" {0}", sshHostname);

            SysDiag.ProcessStartInfo psi = new SysDiag.ProcessStartInfo();
            psi.FileName = sshProgram;
            psi.Arguments = sshArguments;
            psi.UseShellExecute = false;
            psi.RedirectStandardOutput = true;
            psi.RedirectStandardError = true;
            return psi;
        }
Exemplo n.º 2
0
        private SysDiag.ProcessStartInfo CreateOpenSshProcessStartInfo(
                string smuxiHostname, int smuxiPort, int remotingPort,
                string sshProgram, string sshUsername,
                string sshPassword, string sshKeyfile,
                string sshHostname, int sshPort)
        {
            Trace.Call(sshProgram, sshUsername, "XXX", sshKeyfile, sshHostname, sshPort);

            string sshArguments = String.Empty;

            // don't ask for SSH key fingerprints
            // TOO NASTY!
            //sshCommand += " -o StrictHostKeyChecking=no";
            // exit if the tunnel setup didn't work somehow
            sshArguments += " -o ExitOnForwardFailure=yes";

            // run in the background (detach)
            // plink doesn't support this and we can't control the process this way!
            //sshArguments += " -f";

            // don't execute a remote command
            sshArguments += " -N";

            // HACK: force SSH to always flush the send buffer, as needed by
            // .NET remoting just like the X11 protocol
            sshArguments += " -X";

            if (!String.IsNullOrEmpty(sshUsername)) {
                sshArguments += String.Format(" -l {0}", sshUsername);
            }
            if (!String.IsNullOrEmpty(sshPassword)) {
                // TODO: pass password,  but how?
            }
            if (sshPort != -1) {
                sshArguments += String.Format(" -p {0}", sshPort);
            }

            // ssh tunnel
            sshArguments += String.Format(" -L 127.0.0.1:{0}:{1}:{2}", smuxiPort, smuxiHostname, smuxiPort);

            // ssh back tunnel
            sshArguments += String.Format(" -R {0}:127.0.0.1:{1}", remotingPort, remotingPort);

            // ssh host
            sshArguments += String.Format(" {0}", sshHostname);

            SysDiag.ProcessStartInfo psi = new SysDiag.ProcessStartInfo();
            psi.FileName = sshProgram;
            psi.Arguments = sshArguments;
            psi.UseShellExecute = false;
            psi.RedirectStandardOutput = true;
            psi.RedirectStandardError = true;
            return psi;
        }