Ruby Net :: SSH重用会话

时间:2019-01-09 03:18:52

标签: ruby net-ssh

我有几种方法可以这样做:

def method_a
    Net::SSH.start(...) do |ssh|
    end
end

def method_b
    Net::SSH.start(...) do |ssh|
    end
end
def method_c
    Net::SSH.start(...) do |ssh|
    end
end

每个调用Net :: SSH start的方法都是单独的SSH会话,它们执行不同的操作。

是否可以重用Net :: SSH会话,以便所有3种方法都利用一个会话?

谢谢。

3 个答案:

答案 0 :(得分:0)

是的,绝对可以使其干燥。

您可以添加一种接受Net :: SSH连接的主机名的方法,如下所示:

def ssh_exec(hostname)

  Net::SSH.start( hostname, 'user', :timeout => 5, :paranoid => false ) do |ssh|

   ....
  end
end

然后,您可以在需要的地方使用正确的主机名调用此方法ssh_exec() ...

答案 1 :(得分:0)

进入Net :: SSH的方法是放入

@ssh_session = Net::SSH.start( @host, nil, option={:config => true})

一个变量,然后在每个方法上

def method_a
    @ssh_session.exec!("Hello a")
end

def method_b
     @ssh_session.exec!("Hello b")
end
def method_c
     @ssh_session.exec!("Hello c")
end

当然,我将以上所有内容都放在了一个类中,这样我就可以初始化并启动ssh会话和exec命令,而无需重新建立SSH。

答案 2 :(得分:0)

在课程之外,您可以尝试:


def call
  Net::SSH.start(...) do |ssh|
    method_a(ssh)
    method_b(ssh)
    method_c(ssh)
  end
end

def method_a(ssh)
  ssh.exec(...) 
end

def method_b(ssh)
   ssh.exec(...)
end

def method_c(ssh)
   ssh.exec(...)
end
如果在类中,则可以定义“ attr_reader:ssh”,然后通过以下方式对其进行初始化:
attr_reader :ssh

def initialize
  @ssh ||= Net::SSH.start(...)
end

有了它,您可以简单地定义

def method_a
  ssh.exec(...)
end

其他方法也一样。我希望这会有所帮助吗?