K.Sasada's Home Page

Diary - 2014 July

研究日記

文月

_26(Sat)

最近、多段 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 と増えていく予定なので、まぁこのままで良かろう、ということになった。

便利。

_2(Wed)

色々と指摘を受けたりで改良。

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 がイカす。

_1(Tue)

今日の浅草.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}
Sasada Koichi / ko1 at atdot dot net
$Date: 2003/04/28 10:27:51 $