Rubygems net/sshとnet/ssh/shellの関係
最近までrubyでsshをはった処理を書くときにはnet/sshを使っていた。
でもnet/sshでは、単発処理はかけるし、その標準出力は取得出きるけど、
cd hogehoge
touch hoge
cd
ln -s hogehoge/hoge fuge
みたいなディレクトリを移りながらの作業は記述できなかった。
そしたら、そういう目的用にnet/ssh/shellなるgem packageがあるのを発見。
この辺を参考にしながら導入した。
いくつか引っかかったのでメモ。
導入環境はDebian6.0.1
Ruby1.8.7 Rubygems1.3.7
net/sshが入っている事が前提なので、無ければ最初に
sudo gem install net-ssh
次に、 net-ssh-shellのインストール
普通にgemで入れる事もできるが、gemで入るバージョンにはバグがあるらしいのでgitで最新版を入れる。
ここで、添付のREADMEどおりにやったら、僕の環境ではうまくはいらなかった。
ので、ちょっとアレンジ。
cd net-ssh-shell
sudo gem install bundler
sudo gem install echoe
sudo gem build net-ssh-shell.gemspec
これでカレントディレクトリに
net-ssh-shell-0.2.0.gem
ができてるはずなので
sudo gem install net-ssh-shell-0.2.0.gem
で完了。
一応サンプルプログラム。
SSHセッションの呼び出し方はnet-sshとオプション共々同様。
#!/usr/bin/env ruby require 'rubygems' require 'net/ssh' require 'net/ssh/shell' Net::SSH.start('HOSTNAME', 'USERNAME',:keys =>'~/.ssh/id_rsa') do |ssh| ssh.shell do |sh| sh.execute! "cd /tmp" sh.execute! "touch testtest.test" p sh.execute! "exit" end end