最近、多段 ssh が必要になって、putty でどうやるのか調べることにした。
[windows client] | [gw] | [host1]
環境はこんな感じ。gw と host1 には、それぞれ windows client から適切な公開鍵が登録されているとする(対応する秘密鍵を windows client が持っているとする)。
で、どうしようか考えていたんだけど、putty には "Allow agent forwarding" という設定があるんですな。これを on にして、pagent で秘密鍵のパスフレーズを windows client で登録すると、gw で ssh host1 とすると、host1 へのログインに必要になるネゴシエーションを、windows client 上の pagent を使ってやってくれる。
てっきり、gw 上では ssh コマンドを使うから、pagent の情報の転送はできないのかと思ったけど、できるようだ。
remote command で windows client から直接入ることもできるようなのだけど、なんかうまく動かないのと、gw から ssh host1 と打つ手間くらいは惜しまなくても良かろう、というか、host2、host3 と増えていく予定なので、まぁこのままで良かろう、ということになった。
便利。
色々と指摘を受けたりで改良。
class Binding def self self.eval('self') end def __method__ self.eval('__method__') end def arguments method = self.self.method(self.__method__) method.parameters.each.with_object({}){|(_, v), h| h[v] = self.local_variable_get(v) } end end def foo a, b, k1: 2, k2: 3 c = 3 p binding.arguments end foo 1, 2, k1: 'k1' #=> {:a=>1, :b=>2, :k1=>"k1", :k2=>3}
self.self がイカす。
今日の浅草.rbで、
メソッドの引数をまとめて欲しい、と言われたので、
class Binding def arguments self.eval("method(__method__)").parameters.inject({}){|h, (_, v)| h[v] = self.local_variable_get(v); h } end end
こういうメソッドを考えてみました。
こんなふうに使えます。
def foo a, b, k1: 2, k2: 3 c = 3 p binding.arguments end foo 1, 2, k1: 'k1' #=> {:a=>1, :b=>2, :k1=>"k1", :k2=>3}