我有几种方法可以这样做:
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种方法都利用一个会话?
谢谢。
答案 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
其他方法也一样。我希望这会有所帮助吗?