2012-11-30

多段SSHでRDP

通常は専用の環境や専用の接続クライアントを使ってリモートサーバの作業をするのですが、トラブルでうまく使えなかったり、環境がすぐに整えられなかったりした場合に、多段sshでの対応が必要。
今回はMacに切り替えた関係で、専用ツールがインストールできず、すぐにWindowsマシンも設定できないので、『ああ今日のメンテどうしよう!!』と慌てて足回りを用意しないといけなくなりました。

対象サーバはWindows Serverです。Webアプリの動作確認だけなら、標準的なhttp/httpsさえ通っていればいいのですが、今回は遠くのリモートサーバのサービスの起動やDBの確認をする必要があります。

手っ取り早くRemote Desktop接続できればいいので、標準で言うと3389番を飛ばせばOK。

しかし、これが毎回やり方忘れるのでメモ。

多段SSHでRDPのポート転送

$ ssh -t -L 13389:localhost:99999 user-A@server-A ssh -L 99999:server-C:3389 user-B@server-B

#みなさんの多段ssh記録とか、Tipsなんかも知りたいです。

2012-11-29

MacBook生活始めました。

Jenkinsシールを貼って愛用していたDELL Latitudeが諸事情により動かなくなってしまい、次はどうしたものかと考えていたのですが、周囲の薦めにより、Macに乗り換えることにしました。

私にとっては、実に1x年ぶりのMacです。最後に自分で買って使っていたのが、LC630(このことを書くと相当な年齢だとバレますが、まあ仕方がない...)。趣味+お勉強のために使っていた時期があったのです。
当時はターミナルも無しで、ほぼGUIだったので、逆に仕事で使い始めたWindowsマシンのほうが、もの凄〜く難しく思えました。

ですが、まあ仕事なので文句は言えませんので、それなりにWindows+一部Unixという生活で乗り切れるようになりました。

そんな自分は、もう二度とMacと付き合うことは無いだろうと思っていたのですが、なんだかんだ言ってもサーバに入ってターミナルは使うしShellも使うしで、そうなるとどうしてもrootで好き勝手できるUnixマシンが欲しくなります。(サーバのスクリプトを壊してしまったり、環境を壊すわけに行かないので...)

そんな折のMacOS Xです。
多分以前のMacOSだったら選択しなかったと思いますが、店頭でターミナルがササッと上がってシェルで操作できるのを見てしまうと、やっぱり良いな〜と思うようになりました。

周囲からも『たかのさんはMacがいいんじゃない?』と言われ、タイミング的にWindows8もどうかな〜と悩みつつ、MacBookProに決定しました。

なんというか、大正解(^^;

Windowsが嫌いな訳ではないし、業務アプリはWindowsでないとどうしても使えなかったりすることもあるし、自分が動作確認するためにもWindowsの環境は必要です。ただ、その環境はVMなどでまかなえる状態なので、メインが変わっても問題なしでした....。



2012-11-09

JenkinsからYammerに通知をしてみました。

そもそもはBuild通知というよりは、自分の部署のBlogにJenkinsがPOSTしたりすることがあるので、その通知をYammerに投げてくれると気がつくいて見にいけるんだけど…、みたいなコメントをスタッフからいただいたのが始まりです。

最初はSkypeAPIでの通知が良いなあと思ったのですが、Skypeの場合はSkypeクライアントを起動していないといけません。その点、Yammerだと基本はWebなので、APIをたたくかメール送信でPOSTができますので、幾分敷居が低くなります。
(とはいえ、社外のサービスではありますので、POSTする内容には十分配慮しないといけませんが…)

さて、どうやって通知させてみようかな…と思っていたら、ズバリ、Yammer Pluginというものがありました。

こちらのPluginのページ、とても丁寧な解説&スクリーンショットが載っています。英語がよくわからなくてもある程度は設定できてしまうのが有難い!

Jenkins yammer plugin 設定画面

しかし、それ以前に、こういったOAthを使ってアクセスするAPIを使うのは、実は初めてで、そもそもKeyやTokenを取得するところが敷居が高く、はてどうしたものか…というところでした(^^;

よくよくPluginのページを見ると、YammerでのOAthのtokenの取得方法が書かれていましたので、まずはこちらに従ってYammer上での作業を行いました。

1. Yammerに新しいアプリケーションを登録

その、「アプリケーション」ってほどのものじゃないんですけど…という申し訳無さを感じつつ、ひとまず “Register New App” をクリックして、登録画面を開きます。

名前は適当に入れました…。

jenkins-yammer-app-regist-form

Basic Configで設定したのは、下記の項目です。(よくわからなかったので…)

  • Application name
  • Organization
  • Website
  • Support e-mail

アイコンなんかも無しでも大丈夫で、この次、App Directory Config タブから、”Deploy to local App Directory” ボタンを押しました。Stepもまだまだ先にあるようですが、とりあえず下記のステップまででもTokenの取得は出来ています。(こちらは、下図のようにStatusタブで確認できます)

jenkins-yammer-app-regist

Deployしたら、Status Tabをクリックすると、下部にClient Key & Client Secretが表示されているのがわかります。

2. OAuth TokenをGETするには…

分かっている方には申し訳ないのですが、『わたしはこの後どうするんだー?』と悩むことしばし..。

やがてJenkins Yammer Pluginの説明を見返すと、『この get_auth.rb っていうスクリプトをダウンロードして、実行してね』と書かれているではありませんか!

ダウンロードしたスクリプトを ruby get_auth.rb で実行すると、ターミナルから対話形式でOAth Tokenの取得ができるようになっていました。ありがたや、ありがたや…。

処理は、下記のとおりです。

  • Client Key, Client Secretを入れる
  • 所定のURLにアクセスして、コードを取得してね、と言われる <- 実はここに気がつかなくてちょっと悩みました(^^;
  • 取得したコードを、再度コマンドラインにセットする
  • すると、スクリプトがOAuth Tokenを取ってきてくれて、yamlファイルに書き出してくれる!

おかげさまで、このPluginの利用に必要な、4つのパラメータが取得できました!

3. YammerにGroupを作ってPOSTしてみたよ!

さて、いよいよYammerにPOSTする準備が出来ました!
ですが、いきなり社内とはいえ自分のドメインのオープンなメッセージとしてPOSTするのは恥ずかしい…。

そこで、Pluginの図にもあったように、BuildNotificationという、ビルド通知専用のグループを作成してPOSTすることにしました。

せっかくなので@masanobuimaiさん作の、忍者Jenkinsをグループのアイコンに設定しました。(CacooストアでGETいたしました、ありがとうございます!)

jenkins-yammer-via-client

初POSTは、Sphinxドキュメントをビルドするジョブの通知。
『コンテンツのPublishingとか公開もビルドの一つ』と考えて、まずは差し障りのなさそうな、ドキュメントを生成するジョブが成功したらYammerにPOSTするものを設定してみました。

どうなるかなーと思いましたが、意外とあっさりYammerにPOST成功。

ただし、このPluginだと、複雑な文面をPOSTすることは出来なさそうです。かといってソースを見て自分で調整するのは未だできないので、RubyのYammer libraryを使ってもう少し遊びの文面をPOSTできるように企んでいます。
そもそも、OAuth Tokenの取得方法すら分からなかったのですが、このPluginを使うことで少しばかりやり方がわかったので、別Scriptで書いてみる気が出てきました(^^

おまけにもならないですが、ruby のYammerライブラリを使うと、こんな感じです。(Twitterライブラリとほぼおんなじ感じらしい)

require 'yammer'
# ログイン
Yammer.configure do |config|
config.consumer_key = 'アプリのatoken'
config.consumer_secret = 'アプリのsecret'
config.oauth_token = 'ユーザのatoken'
config.oauth_token_secret = 'ユーザのsecret'
end
Yammer.my_feed # タイムライン表示
Yammer.update(“POSTするよー”
)  #update メソッドでPOSTします

お願いなど:

ついつい浮かれて試してしまう性格なので、そもそもこんな使い方してはいけません!とか、これは危ないよ、といったご指摘もいただけると幸いです…。