sshを使ったリモートメンテナンス


sshfs

debian 4.0(etch)のPCで、Synaptic Package Manager を使って sshfs を入れて、 さくらのレンタル・サーバーを手元のPCにマウントすることで、好きなエディタや ファイラを使って管理することができるようになる。

パッケージを入れた後は、

sudo gpasswd -a otsuka fuse

としてから、一旦ログアウトする。 id -nG コマンドを打って fuse グループが表示されたら使える。

fuseはユーザーモードでファイルシステムをマウントできるようにする仕組みである。 古いdebianのディストリビューションでは sudo /sbin/modprobe fuse をしないと使えない場合がある。

ssh rental-server.example.jp ls -l 等のコマンドで問題なければ、ユーザーモードで

mkdir -p ~/mnt/rental-server
sshfs rental-server.example.jp: ~/mnt/rental-server

とすれば、~/mnt/rental-server 以下のディレクトリに Sakura のサーバーのフォルダが見えるようになる。

マウントの解除は

fusermount -u ~/mnt/rental-server

とする。

マウントしたまま HOME ディレクトリ下を rsync 等で別のサーバーにバックアップすると、sshfsでマウントした先までバックアップしてしまうので、先にマウントを解除しておく必要がある。

マウントしているかどうかは df コマンドで分かるが、同じサーバーで他のユーザーが実行する df コマンドには出てこない (df -a とすれば出る) 。 また、他のユーザーがマウント先をたどることは出来ない。

別サーバーで、自分のUIDやGIDの値が異なる場合に、sshfs でマウントするとファイルの所有者が別のユーザー名で表示されて気持ちが悪い。

sshfs -o idmap=user rental-server.example.jp: ~/mnt/rental-server

とすれば、UIDだけは自分の名前で表示されるようになった。

サーバー鍵の変更

めったに起きないが、sshで接続したことのあるサーバーの鍵が変わってしまうと、 sshで接続できなくなる。そんなときは、~/.ssh/known_hosts にあるサーバーの エントリを消せば良かったのだが、debian 4.0 になって known_hosts のホスト名や IPアドレスの項目がハッシュになっていて、エディタなどでは探し出せなくなっている。 OpenSSH Manual Pagesのssh-keygen(1)にあるように、これを使ってホスト名を探し出して削除する必要がある。

known_hostsからホスト名 foo.example.jp を探す

ssh-keygen -F foo.example.jp

known_hostsからホスト名 foo.example.jp のエントリを削除する

ssh-keygen -R foo.example.jp

VPSのデスクトップで家のNASにアクセスする

Sakura/VPSで出先からでも同じデスクトップにアクセスできるようになると、 そこから家のNASにマウントしてファイルを読んだりできるようにしたくなる。

家のプロバイダ接続は固定IPではないのでそのままではsshで接続できない。 buffalonas.com 等のサービスを使えば、外からでもiPhone等からアクセスできるようになるようだが、 自前でやるのも面白いかもしれない。

お家サーバー(home-obss)のcronで毎時03分に適当なアドレスでVPSに対してアクセスする。

$ cat <<EOD >~/bin/cron.dynaddr.sh
> #/bin/sh
> wget -q --spider http://(VPSのアドレス).sakura.ne.jp/dynaddr
> EOD
$ chmod u+x ~/bin/cron.dynaddr.sh
$ crontab -e
3 */1 * * *  /home/otsuka/bin/cron.dynaddr.sh

これを、VPS側で tail -F /var/log/httpd/access_log 等で監視すれば、 下記のようなログが1時間おきに残っているので、自宅のIPアドレスがわかる。

"HEAD /dynaddr HTTP/1.0" 404 - "-" "Wget/1.10.2"

自宅のルーターはVPSのIPアドレスだけからsshでアクセスできるように設定する。 アドレス制限をかけないと総当り攻撃をうけるので注意。

自宅のアドレスが分かったら、~/.ssh/config に HostName として書いておく。

$ vi ~/.ssh/config
Host home-obss
  HostName (自宅のIPアドレス)

マウントするための接続スクリプトを設定

$ cat <<EOD >~/bin/connect-nas.sh
> #!/bin/sh
> sudo /sbin/ifconfig lo:0 192.168.11.10/24
> sudo -E ssh home-obss -F $HOME/.ssh/config -l otsuka -D 1080 \
> -L 192.168.11.10:139:(自宅NASのローカルIPアドレス):139
> sudo /sbin/ifconfig lo:0 down
> EOD
$ chmod u+x ~/bin/connect-nas.sh

マウントするときは、VPSの一般ユーザーから connect-nas.sh を実行すれば、 自宅に接続できるので、この状態でGNOMEのファイル・ブラウザで Windows Share の 192.168.11.10 に接続すれば自宅のNASにアクセスできる。

GNOMEのファイルブラウザ(Nautilus)の標準設定では、ネットワーク上のファイルのサムネールは 作らないようになっている。設定を変更すればNASのフォルダに入った写真をサムネールで 探すこともできる。サムネールの作成はかなり時間がかかるが次回からは ~/.thumbnails 以下に 保存されているキャッシュを使うので高速だ。定期的に ~/.thumbnails を掃除する必要がある。

connect-nas.shで接続している状態で、GNOMEデスクトップのネットワークProxyの設定で

Manual proxy configuration
Socks host: localhost
Port: 1080

に切り替えて、Firefox等で自宅のローカルIPを開くことができる。

戻すときは、Direct internet connection に切り替えて connect-nas.sh の接続を logoutする。このときなぜかハングアップしてしまうので、Ctrl+Cで止める必要がある。

お家サーバーがSSHとSMBの中継をするので、スピードはあまり出ない。 自宅のIPアドレスが変わった場合、~/.ssh/config を修正する必要がある。自動化できないものか。

リンク


免責事項

ここに記載されている内容を実際に運用した場合のトラブルに関しては一切責任を負えませんのでご了承ください。
Copyright 2000-2011 Koichi Otsuka


トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-12-09 (金) 00:11:21 (4495d)