ssh
 UNIX/LinuxではGUI操作よりも、CUIコンソールでの操作を日常的に行います。インターネットの黎明期ではtelnet [G] が多用されていましたが、現在は通常はSSHを用います。私自身はプログラミングやサーバ管理に関する仕事では、殆ど一日中SSHを使用しています。
 SSHはtelnetと同じようにネットワーク経由でログインして作業するための仕組みです。telnetと異なるのは通信経路が暗号化されるということです。接続用パスワードも通信内容もすべて暗号化されます。
 また、公開鍵認証を使用することで、パスワード認証よりずっと高度なセキュリティの確保が望めます。更に、OpenSSHではポートフォワーディング(トンネル)機能により、この暗号化された接続を用いて、任意のポートの通信を通すことが出来ます。これにより暗号化されていないプロトコルをセキュアに利用出来るとともに、遠隔地のサーバのファイアウォール内だけで使用可能な多くの操作が行えるようになります。

Columns:
公開鍵認証

公開鍵認証用の鍵の生成

>ssh_keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/UserName/.ssh/id_rsa):HitEnter Enterpassphrase (empty for no passphrase): XXXX Enter same passphrase again: XXXX Your identification has been sabed in /home/UserName/.ssh/id_rsa Your public key has been saved in /home/UserName/.ssh/id_rsa.pub the key fingerprint is : 生成された鍵のFingerprint

リモートのコマンドを実行

> ssh username@somewhere.com php -i | grep "PHP\ Version" PHP Version => 5.2.9 ※パスワードなしの公開鍵認証を設定していれば、パスワードの確認もされないため、スクリプトなどから完全に自動実行が可能となる。

トンネル機能

リモートへのトンネルと、リモートからのトンネルの例

ポートフォワーディング:

ssh -g -L 8080:192.168.111.200:80 UserName@192.168.111.1 ローカルで受けた通信をリモート側ネットワークにフォワード
sshクライアントはUserNameで192.168.111.1にssh接続し、
sshクライアントの8080ポートへのアクセスを、
192.168.111.1側のネットワークの192.168.111.200の80ポートに転送する。

リバースポートフォワーディング:

ssh -g -R 8080:192.168.222.200:80 UserName@192.168.222.1 リモートで受けた通信をローカル側ネットワークにフォワード
sshクライアントはUserNameで192.168.222.1にssh接続し、
192.168.222.1の8080ポートへのアクセスを、
sshクライアント側のネットワークの192.168.222.200の80ポートに転送する。
さらに荒技で再接続かけるとか(未検証)。
while [ true ]; do ssh -g -R 8080:192.168.222.200:80 UserName@192.168.222.1; done;
【重要】1024番以下のポートは特権ポート(privileged ports)と呼ばれ、
    root権限以外では接続元・接続先のサーバ自身には転送出来ません。
    どうしても必要な場合にはroot権限で実行するか、su や sudo などでrootに昇格して実行する必要があります。


設定スクリプトの使用による、簡単なsshトンネルの作成

> cd ~/.ssh > cat config Host test HostName 192.168.0.1 User UserName GatewayPorts yes LocalForward 3050 192.168.0.2:3050 LocalForward 8080 192.168.0.3:80 ^D > ssh test
ちなみにWindowsからPuttyで同じことを行うためには以下のような感じで。


sshfs
OS上のユーザ空間で利用可能なファイルシステムの基盤記述であるfuse上で動作するファイルシステムのひとつです。実際的にはSSH/SFTPでアクセス可能なサーバであれば、ローカルのディレクトリにたいしてマウントが可能となります。

CentOSでは追加レポジトリを設定することで、yumによって簡単にインストールすることができます。
sudo yum install sshfs sudo usermod -G fuse UserName 上記が完了したらあとは実際に以下のコマンドのように使用するだけです。
mkdir -p ./mount_point sshfs UserName@xxxx.xxx ./mount_point 使い終わったら
fusermount -u ./mount_point rmdir ./mount_point という感じで。

これがあると公開鍵認証のsftp接続に対応していない開発ツールでもいけます。
ただし、マウントした空間でgrepやアーカイブの圧縮・展開したりすると泣けるくらい遅いです。たぶん、マウントオプションでキャッシュなどの設定を工夫すれば解決出来るのかもしれませんが、そのあたりのことはsshでやった方が手っ取り早いです。

あと、シンボリックリンクで泣ける事態を引き起こさないように注意してください。普通にマウントするとシンボリックリンクは元の場所で設定された通りの位置にリンクしています。

External links:
お知らせ
公開ページにだけスナップショット を組み込んでみました。

Sylph1,2及びOpenSylphについてはこちらをご覧ください。

Powered by linode.com
Powered by easyDNS


LastUpdate:
09/05 php
08/18 git
08/12 screen