パスワードもユーザ名も正しいはずなのに,の巻

ことの起こり

AWS EC2上に,OTRS をインストールし, Gmail からのメールをポーリングで読むように設定した. 難しい話ではない.

だけど繋がらない. あれれ?

だって,先日の日記エントリの通り,Ruby では問題なくできたぜ? IMAP は有効にしたし,2段階認証はやっていないし.

Perl 書いた IMAP クライアントで試してみる.

仕方がないな. OTRS は (Ruby ではなく) Perl で大半が書かれている. それと似たような記述でログインをテストしてみる. こんな感じ.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
use strict;
use warnings;
use Net::IMAP::Simple;

use IO::Socket::SSL;

# Create the object
my $imap = Net::IMAP::Simple->new('imap.gmail.com', use_ssl => 1, port => 993) ||
  die "Unable to connect to IMAP: $Net::IMAP::Simple::errstr\n";

# Log on
if (!$imap->login('[email protected]','_p_a_s_s_w_o_r_d_', debug => 1)) {
  print STDERR "Login failed: " . $imap->errstr . "\n";
  exit(64);
}

実行…あれれ?

1
2
[email protected]:~$ perl test.pl
Login failed: [ALERT] Please log in via your web browser: http://support.google.com/mail/accounts/bin/answer.py?answer=78754 (Failure)

んんん?

ブラウザでアクセスせよ,とな. でも,この動作環境,Ubuntu Server で,デスクトップ環境入ってないよ.もちろんブラウザも.

手元のブラウザで事態を把握してみようと試みたところ,どうやらイカガワシイと思われるアクセスを遮断しているようだ. 赤い画面でお怒りのGmail様

socksサーバを立ってて逃げ道を作る.

w3m など,文字ターミナル向けブラウザを使ってアクセスすれば良いのかもしれない. でも,たぶん,Googleのことだから,JavaScriptとか入っていていろいろ面倒なことになりそうだ.

なので,ssh についている socks サーバ機能を用いる. 手元の端末から,次のようにして,1080 版をsocksの口にする.

1
ssh -D1080 server.example.com

server.example.com は,実際には,EC2のインスタンス. ここで指定した1080番ポートはlocalhostのもの.だから,EC2側のincomingはsshのポート,TCP 22番だけ開いていればよい.

そして,手元のブラウザのproxy設定.localhost:1080 で socks を経由するよう設定する.

ここまでで下ごしらえは完了. 手元のブラウザから,Gmail へアクセスする. あとは…なりゆきでアクセスすれば,お怒りが解けた…はず. (2月に入ってからこの稿を書き上げているので,記憶が既に曖昧…)

まとめっぽい何か

ssh の -D オプションは,ヘッドレスサーバを管理している時に割と便利なので,覚えておくと何かと役に立つ.

こういう対策をGmail側がしなきゃいけないくらい,botからの不正アクセスが多いってことなのだろうなぁ…. 面倒だ,と不満を漏らしてはいけないのだろう.