/// <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); }
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); }
/// <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(); } }