示例#1
0
        /// <exception cref="Com.Jcraft.Jsch.JSchException"/>
        private Session CreateSession(string host, SshFenceByTcpPort.Args args)
        {
            JSch jsch = new JSch();

            foreach (string keyFile in GetKeyFiles())
            {
                jsch.AddIdentity(keyFile);
            }
            JSch.SetLogger(new SshFenceByTcpPort.LogAdapter());
            Session session = jsch.GetSession(args.user, host, args.sshPort);

            session.SetConfig("StrictHostKeyChecking", "no");
            return(session);
        }
示例#2
0
 public virtual void TestArgsParsing()
 {
     SshFenceByTcpPort.Args args = new SshFenceByTcpPort.Args(null);
     Assert.Equal(Runtime.GetProperty("user.name"), args.user);
     Assert.Equal(22, args.sshPort);
     args = new SshFenceByTcpPort.Args(string.Empty);
     Assert.Equal(Runtime.GetProperty("user.name"), args.user);
     Assert.Equal(22, args.sshPort);
     args = new SshFenceByTcpPort.Args("12345");
     Assert.Equal("12345", args.user);
     Assert.Equal(22, args.sshPort);
     args = new SshFenceByTcpPort.Args(":12345");
     Assert.Equal(Runtime.GetProperty("user.name"), args.user);
     Assert.Equal(12345, args.sshPort);
     args = new SshFenceByTcpPort.Args("foo:2222");
     Assert.Equal("foo", args.user);
     Assert.Equal(2222, args.sshPort);
 }
示例#3
0
        /// <exception cref="Org.Apache.Hadoop.HA.BadFencingConfigurationException"/>
        public virtual bool TryFence(HAServiceTarget target, string argsStr)
        {
            SshFenceByTcpPort.Args args        = new SshFenceByTcpPort.Args(argsStr);
            IPEndPoint             serviceAddr = target.GetAddress();
            string  host = serviceAddr.GetHostName();
            Session session;

            try
            {
                session = CreateSession(serviceAddr.GetHostName(), args);
            }
            catch (JSchException e)
            {
                Log.Warn("Unable to create SSH session", e);
                return(false);
            }
            Log.Info("Connecting to " + host + "...");
            try
            {
                session.Connect(GetSshConnectTimeout());
            }
            catch (JSchException e)
            {
                Log.Warn("Unable to connect to " + host + " as user " + args.user, e);
                return(false);
            }
            Log.Info("Connected to " + host);
            try
            {
                return(DoFence(session, serviceAddr));
            }
            catch (JSchException e)
            {
                Log.Warn("Unable to achieve fencing on remote host", e);
                return(false);
            }
            finally
            {
                session.Disconnect();
            }
        }