ssh
June 03, 2008
ゆとりプログラマがやってきましたよ。
Linux+Apache+PHP+PostgreSQLでWebシステムを開発しているとき、サーバによってはsshの22番ポートとhttpの80番ポートしか空いていない場合があって、その場合PostgreSQLの強力なGUIツールpgAdminが使えなくて、泣く泣くpsqlコマンドで操作することがある。
実はこの問題を解決する方法として、ポートフォワーディングというものがあったりする。
簡単にいうと開いているsshのポートを使って、内部のポートにアクセスするトンネルを作る感じ。
本当は他にいろいろ便利なことができる技術なのだけれども、自分はpgAdminが使えればいいのでそこはスルー。
例えば、localhost(Linux)の55432番ポートを22番ポートしか開いていないremotehostの5432番ポートに接続するコマンド
これで快適pgAdminライフが送れる。
ちなみにWindowsでもPuTTYでポートフォワーディング設定ができるらしいので、Windowsからでも快適pgAdminライフが可能っぽい。
Linux+Apache+PHP+PostgreSQLでWebシステムを開発しているとき、サーバによってはsshの22番ポートとhttpの80番ポートしか空いていない場合があって、その場合PostgreSQLの強力なGUIツールpgAdminが使えなくて、泣く泣くpsqlコマンドで操作することがある。
実はこの問題を解決する方法として、ポートフォワーディングというものがあったりする。
簡単にいうと開いているsshのポートを使って、内部のポートにアクセスするトンネルを作る感じ。
本当は他にいろいろ便利なことができる技術なのだけれども、自分はpgAdminが使えればいいのでそこはスルー。
例えば、localhost(Linux)の55432番ポートを22番ポートしか開いていないremotehostの5432番ポートに接続するコマンド
ssh -C -N -L 55432:localhost:5432 username@remotehost
これで快適pgAdminライフが送れる。
ちなみにWindowsでもPuTTYでポートフォワーディング設定ができるらしいので、Windowsからでも快適pgAdminライフが可能っぽい。
February 14, 2008
必要に迫られてsshトンネリングをしたのでメモ。
sshトンネリングを使うときの要求としては多分2つあって、「sshプロトコルを使って暗号化されたセッションの中で他のプロトコルをセキュアに利用したい(カプセル化したい)」場合と、「そもそもsshポートしか開いていない場合にそのポートを他のプロトコルの経路として使いたい」場合があると思う。
どちらの場合でも使い方は基本的に同じ。
例えばPostgreSQLサーバに接続するpsqlコマンドをsshトンネリングして使う場合を想定してみる。
【前提条件】
・ローカルサーバ:localhost
・リモートサーバ:remote.com
・リモートサーバユーザ:remoteuser
・リモートsshサーバポート:22
・リモートPostgreSQLサーバポート:5432
・データベース名:testdb
・データベースユーザ:dbuser
まずローカルサーバの55555番ポートからリモートサーバの5432番ポートにsshトンネルを掘る。
引数の意味は以下のとおり。
"-2":ssh2接続指定。
"-N":トンネリングだけを指定(他は何もしない)。
"-f":バックグラウンド実行を指定。
"-L":localport:localhost:remoteportの形式で指定。
"-p":リモートsshサーバのポートを指定。デフォルトは22なので今回は省略可。
成功するとローカルサーバの55555番ポートとリモートサーバの5432番ポートがリモートsshサーバの22番を経由してsshトンネルが確立される。
あとは
てな感じでpsqlコマンドで明示的にローカルホストの55555番ポートを指定してやればいい。
【参考URL】
OpenSSH
sshトンネリングを使うときの要求としては多分2つあって、「sshプロトコルを使って暗号化されたセッションの中で他のプロトコルをセキュアに利用したい(カプセル化したい)」場合と、「そもそもsshポートしか開いていない場合にそのポートを他のプロトコルの経路として使いたい」場合があると思う。
どちらの場合でも使い方は基本的に同じ。
例えばPostgreSQLサーバに接続するpsqlコマンドをsshトンネリングして使う場合を想定してみる。
【前提条件】
・ローカルサーバ:localhost
・リモートサーバ:remote.com
・リモートサーバユーザ:remoteuser
・リモートsshサーバポート:22
・リモートPostgreSQLサーバポート:5432
・データベース名:testdb
・データベースユーザ:dbuser
まずローカルサーバの55555番ポートからリモートサーバの5432番ポートにsshトンネルを掘る。
$ ssh -2 -N -f -L 55555:localhost:5432 remoteuser@remote.com -p 22
password:
引数の意味は以下のとおり。
"-2":ssh2接続指定。
"-N":トンネリングだけを指定(他は何もしない)。
"-f":バックグラウンド実行を指定。
"-L":localport:localhost:remoteportの形式で指定。
"-p":リモートsshサーバのポートを指定。デフォルトは22なので今回は省略可。
成功するとローカルサーバの55555番ポートとリモートサーバの5432番ポートがリモートsshサーバの22番を経由してsshトンネルが確立される。
あとは
$ psql -h localhost -p 55555 testdb -U dbuser
password:
てな感じでpsqlコマンドで明示的にローカルホストの55555番ポートを指定してやればいい。
【参考URL】
OpenSSH
February 12, 2008
まあつまり複数のプロジェクトがパラレル走っているというダークな状況なわけなのだけれども、だんだんサーバごとにEmacsの環境を構築するのが面倒になってきた。
というわけで、今まで導入していなかったTRAMPをインストールすることにした。
TRAMPはEmacsでリモートファイルの編集をするためのパッケージ。
まずはファイルをダウンロードして任意のディレクトリに解凍。
$wget http://ftp.gnu.org/gnu/tramp/tramp-2.1.9.tar.gz
$tar zxvf tramp-2.1.9.tar.gz
$mv tramp-2.1.9 ~/emacs/tramp
.emacsに以下の行を追加
;;tramp
(add-to-list 'load-path "~/emacs/tramp/lisp/")
(require 'tramp)
リモートサーバ上のファイルを編集するときには以下のコマンドを実行
C-x C-f /ssh:user@example.com:/path/to/file
他にもいろいろと設定項目があるみたいだけれども、今はこれで十分満足。
【参考URL】
Hasta Pronto.org
November 26, 2007
結構インストールに手間取った。
以下インストールメモ。
【libssh2】
libssh2のためにopenssl-develをインストール。
# yum install openssl-devel
libssh2をダウンロードしてインストール。
# wget http://nchc.dl.sourceforge.net/sourceforge/libssh2/libssh2-0.18.tar.gz
# tar zxf libssh2-0.18.tar.gz
# cd libssh2-0.18/
# ./configure
# make
# make install
【PECL::ssh2】
phpizeコマンドを利用するためにphp-develをインストール。
# yum install php-devel
で、PECL::ssh2をpearコマンドでインストールしようとしたのだけれども見事に失敗。
×# pear install ssh2
どうやらpeclコマンドでインストールする必要があるらしい。
で、peclコマンドでインストールしようとしたのだけれども失敗。
×# pecl install ssh2
「バージョンがまだ0.10なので"-beta"を付加しろ」って怒られた。再度挑戦。
お、うまくいったかと思いきやmakeの部分でエラー。
# pecl install ssh2-beta
…
# make: *** [ssh2.lo] エラー 1
peclコマンドは無理と判断して、peclのサイトから直接tarballをダウンロードしてインストールすることに。
が、またもやmake部分でエラー
# wget http://pecl.php.net/get/ssh2-0.10.tgz
# tar zxvf ssh2-0.10.tar.gz
# cd ssh2-0.10
# phpize
# ./configure --with-ssh2
# make
・・・
# make: *** [ssh2.lo] エラー 1
いろいろ調べてみて対処法を発見。
./configure後にconfig.hに以下の行を追加すればmakeが通った。
#define LIBSSH2_APINO 200412301450
あとはssh2_connectなどの関数を使って接続。
【参考URL】
http://www.doyouphp.jp/tips/tips_ssh2.shtml
http://php.mirror.camelnetwork.com/manual/ja/ref.ssh2.php
http://pecl.php.net/bugs/bug.php?id=9656&edit=3