2014年8月11日月曜日

NodeJSで気になる点

var Iconv   = require("iconv").Iconv;
var cheerio = require('cheerio')
var urlutil = require('url');
var url_util = require('url'); //不本意な記述

var charsetDetector = require("node-icu-charset-detector");
特に問題はないコードと言えますが、気に入らないのは、var urlutil = require(‘url’);の箇所で定義した変数。
以降のコードには、
var getWebPageTitle = function(url, callback) {
    var urlElements = url_util.parse(url, false);

http.createServer(function (request, response) {
    var urlObj = urlutil.parse(request.url, true);
などと、別の使用局面で、同じような記述をする事になるのですが、なぜかurlutilはスコープ外完で使い回す事ができない。undefinedとランタイムエラーが起こる。今の記載のように局面毎に、別変数を定義してやる必要が有った.
 これはどうも、良くわからない仕様だと思った次第です。
Written with StackEdit.

2014年8月3日日曜日

iTemがNitorus.IOに接続出来なかった→解決

 2時間ほど悩んだので、メモを兼ねて。
 Nitrous.IOは、ssh経由で、ローカル環境に導入されたターミナルから接続できます。
 普段私が使うターミナルはiTerm2ですが、Nitrous.IOのBoxにssh接続しようとしても、下記のエラーが出て、以前のように接続できなくなりました。

$ ssh action@apne1.nitrousbox.com -p 20150
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
95:1c:0c:ed:15:13:a2:39:f2:f6:3e:2f:4a:be:dc:b0.
Please contact your system administrator.
Add correct host key in /Users/hanori/.ssh/known_hosts to get rid of this message.
Offending RSA key in /Users/hanori/.ssh/known_hosts:4
RSA host key for [apne1.nitrousbox.com]:20150 has changed and you have requested strict checking.
Host key verification failed.

 思えば、接続しようとしたBoxは一度同名のBox名で作成して、一旦削除して再度作成しなおしたのでした。
 よって、Local側とBoxに登録されたSSH鍵認証の情報を再作成しなおさなければなりませんでした。
 Nitrous desktopを使う方法であれば、比較的簡単に復旧する事ができます。

下記がその手順になります。

  1. 既存のSSHを削除する
  2. Nitrous DesktopからShellを起動

1. 既存のSSHを削除する

Nitrous.IOのホスト名によって登録された鍵を検索し、ssh-keygenにて削除します。
冒頭に引用したssh接続時のエラーメッセージには、下記の記載がありました。

RSA host key for [apne1.nitrousbox.com]:20150 has changed and you have requested strict checking.

 この[apne1~]がローカルにて管理されたSSHのホスト名になります。
 下記のコマンドを実行すれば、ローカルに鍵情報が存在する事を確認できます。

ssh-keygen -F [apne1.nitrousbox.com]:20150

 # Host [apne1.nitrousbox.com]:20150 found: line 4 type RSA
 /Users/hanori/.ssh/known_hosts updated.[apne1.nitrousbox.com]:20150 ssh-rsa AAAAB3NzaC~(鍵情報)~El

 次に、登録された鍵を削除します。

ssh-keygen -R [apne1.nitrousbox.com]:20150

# Host [apne1.nitrousbox.com]:20150 found: line 4 type RSA/Users/hanori/.ssh/known_hosts updated.
Original contents retained as /Users/hanori/.ssh/known_hosts.old

これで、ローカルから一旦、鍵の登録を削除する事が出来ました。

ssh action@apne1.nitrousbox.com -p 20150

上記のコマンドを実行してみて、接続できるかどうか確認して下さい。
私の環境では、この対処だけでは接続出来ませんでした。私と同様、Boxに接続出来無かった場合は、次に進んで下さい。


2. Nitrous DesktopからShellを起動

 ローカルから鍵の登録を削除するだけで、接続できるようになる場合も在りますが、私の環境では、下記のエラーが出て、まだ接続できませんでした。

ssh action@apne1.nitrousbox.com -p 20150

The authenticity of host ‘[apne1.nitrousbox.com]:20150 ([176.34.56.246]:20150)’ can’t be established.
RSA key fingerprint is 95:1c:0c:ed:15:13:a2:39:f2:f2:f2:f2:f2:f2:dc:b0.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘[apne1.nitrousbox.com]:20150,[176.34.56.246]:20150’ (RSA) to the list of known hosts.
Permission denied (publickey).

 Public Keyの更新が拒否されました。
 なぜPublic Keyの更新ができないのか判りません。sudoでルート権限下で、いままでの手順を繰り返してもやはりダメでした。
 最終的に、下記の手順で復旧しました。

  1. Nitrous Desktopを起動(既に起動している場合は再起動)
  2. NitrousDesktopで「SHELL」ボタンをクリックし、SHELLを起動
  3. PublicKeyを置き換える(?)か聞いてくるので、OKをクリックする

iTerm2から、下記のコマンドを実行すると、接続が問題無くできるようになった事が確認できました。

> ssh action@apne1.nitrousbox.com -p 20150
action@mynode-130750:~$ ls
README.md  tmp  workspace

 なお、下記のメッセージが出てしまう場合は、いろいろ対処しているなかで、無操作の一定時間経過によってBoxが既に停止してしまっている可能性があります。(無償利用時)

ssh: connect to host apne1.nitrousbox.com port 20150: Connection refused

 その場合はNetrous.IOのダッシュボードのページから、BoxをStartして、再度接続をしてみて下さい。

以上です。