VCCW+WordMoveでエックスサーバーとローカル環境を同期する

エックスサーバーでVCCW+WordMoveのSSH接続がぐぬぬというツイートを拝見したので自分の設定を公開。
環境は Windows7 + Cygwin(64bit)(ターミナルエミュレータ)
※Cygwinのプラグイン等、普段使う用にインストール済みのものもありますのでエラーが出たら適宜導入してください。

INDEX

  1. エックスサーバーのSSH設定
  2. VCCWでローカル環境作成
  3. Movefile設定
  4. wordmoveコマンド実行!
  5. 詰まった点
  6. 参考サイト

エックスサーバーのSSH設定

エックスサーバーのSSH接続はパスワード認証による接続が不可ですので公開鍵認証により設定を行います。 管理画面で公開鍵認証用鍵ペアを生成する方法とユーザがローカル環境で鍵ペアを作成し管理画面に公開鍵を登録する方法の2通りが用意されていますが今回は後者を。
詳しくはエックスサーバー側マニュアルをご確認ください。
SSH接続 | サーバーについて | エックスサーバー マニュアル

といっても以前 Mac OS XでエックスサーバーにSSH接続 という記事を書いていますのでそちらをご参照頂ければ問題ないかと思いますので今回はCygwinでの鍵ペア生成、エックスサーバーサーバーパネルへの公開鍵登録部分のみを。

#Cygwin
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ユーザ名/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

#03 デフォルトでは /home/ユーザ名/.ssh/id_rsa が生成されるので別の鍵ペアを生成したい場合は /home/ユーザ名/.ssh/hoge 等を入力
#04-05 パスフレーズを求められるので任意のフレーズを入力・再入力

Cygwin(64bit)を使用している場合 C:\cygwin64\home\ユーザ名\.ssh\ に 秘密鍵(id_rsa)と公開鍵(id_rsa.pub)が保存されます。

鍵ペアが生成されたので公開鍵をエックスサーバーサーバーパネルへ登録します。
“サーバーパネル > SSH設定”へ
vccw-xserver-01
デフォルトでは状態がOFFになっていると思うのでONに。
今回はローカルで生成した公開鍵を登録するので「公開鍵登録・設定」タブをクリック。
公開鍵(id_rsa.pub)をエディタで開き入力、登録で完了。
vccw-xserver-02

SSH接続出来るかを確認。

#Cygwin
$ ssh xserver_account@xserver_account.xsrv.jp -p 10022
Enter passphrase for key '/home/ユーザ名/.ssh/id_rsa':
Last login Tue Mar 31 xx:xx:xx 2015 from xxx.xxx.com
[xserver_account@sv1xx ~]$

エックスサーバーのSSH接続ポートは 10022 なのでオプション -p 10022を付与して、パスフレーズを求められるので登録したものを入力。
問題なければ接続できるかと思います。


SSH接続の度にパスフレーズを聞かれるのが面倒なのでssh-agentに秘密鍵を登録して手間を省きます。

#Cygwin
$ ssh-add /home/ユーザ名/.ssh/id_rsa
Enter Passphrase for /home/ユーザ名/.ssh/id_rsa:

パスフレーズを求められるので入力して登録完了
現在登録されている秘密鍵は以下のコマンドで確認。

#Cygwin
$ ssh-add -l
2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx /home/ユーザ名/.ssh/id_rsa(RSA)

以上でエックスサーバーのSSH設定は完了。
次にVCCWでローカル環境を構築を行います。

VCCWでローカル環境作成

VCCWについては本家を見て頂いたほうがはやいので割愛を。
VCCW – A WordPress development environment.

作業ディレクトリルートに移動、VCCWダウンロード、解凍、リネーム、vagrant upという流れで。

#Cygwin
$ cd /home/ユーザ名/
$ wget https://github.com/vccw-team/vccw/archive/2.5.0.zip
$ unzip 2.5.0.zip
$ mv vccw-2.5.0 vccw
$ cd vccw
$ vagrant up

プロビジョニングが完了して http://wordpress.local へアクセスするとWordPressがインストールされていると同時にvccwディレクトリにMovefileが生成されているかと思います。
vccw-xserver-03

次にWordmoveを使うためにMovefileにエックスサーバーの情報(既にインストール済みのWordPress情報及びSSH情報)を入力していきます。

Movefile設定

デフォルトのMovefileは以下の通り。
「VCCW+WordMoveでエックスサーバーとローカル環境をSSH接続で同期する」場合にはハイライトされた行を変更します。他サーバーやFTPを用いる場合には適宜変更が必要となります。

local:
  vhost: "http://wordpress.ray-medical"
  wordpress_path: "/var/www/wordpress"

  database:
    name: "wordpress"
    user: "wordpress"
    password: "wordpress"
    host: "localhost"

staging:
  vhost: "http://example.com"
  wordpress_path: "/var/www/your_site" # use an absolute path here

  database:
    name: "database_name"
    user: "user"
    password: "password"
    host: "localhost"
    charset: "utf8"

  exclude:
    - ".git/"
    - ".gitignore"
    - ".sass-cache/"
    - "bin/"
    - "tmp/*"
    - "Gemfile*"
    - "Movefile"
    - "wp-config.php"
    - "wp-content/*.sql"

  # paths: # you can customize wordpress internal paths
  #   wp_content: "wp-content"
  #   uploads: "wp-content/uploads"
  #   plugins: "wp-content/plugins"
  #   themes: "wp-content/themes"
  #   languages: "wp-content/languages"
  #   themes: "wp-content/themes"

  # ssh:
  #   host: "host"
  #   user: "user"
  #   password: "password" # password is optional, will use public keys if available.
  #   port: 22 # Port is optional
  #   rsync_options: "--verbose" # Additional rsync options, optional
  #   gateway: # Gateway is optional
  #     host: "host"
  #     user: "user"
  #     password: "password" # password is optional, will use public keys if available.

  # ftp:
  #   user: "user"
  #   password: "password"
  #   host: "host"
  #   passive: true

# production: # multiple environments can be specified
#   [...]

※なおMovefileはインデントが非常に重要なようですので以下の様にインデントがズレると wordmove コマンド実行時にエラーが発生します。

staging:
  vhost: "http://example.com"
  wordpress_path: "/var/www/your_site" # use an absolute path here

  database:
    name: "database_name"
     user: "user"
    password: "password"
    host: "localhost"
    charset: "utf8"

#インデントがずれた状態で wordmove コマンド実行時エラー
[vagrant@wordpress vagrant]$ wordmove pull --all

▬▬ ✓ Using Movefile: ./Movefile ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
/usr/local/rbenv/versions/2.1.2/lib/ruby/2.1.0/psych.rb:370:in `parse': (<unknown>): did not find expected key while parsing a block mapping at line 12 column 3 (Psych::SyntaxError)
        from /usr/local/rbenv/versions/2.1.2/lib/ruby/2.1.0/psych.rb:370:in `parse_stream'
        from /usr/local/rbenv/versions/2.1.2/lib/ruby/2.1.0/psych.rb:318:in `parse'
        from /usr/local/rbenv/versions/2.1.2/lib/ruby/2.1.0/psych.rb:245:in `load'
        from /usr/local/rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/wordmove-1.2.0/lib/wordmove/deployer/base.rb:58:in `fetch_movefile'
        from /usr/local/rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/wordmove-1.2.0/lib/wordmove/deployer/base.rb:20:in `deployer_for'
        from /usr/local/rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/wordmove-1.2.0/lib/wordmove/cli.rb:45:in `pull'
        from /usr/local/rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/thor-0.19.1/lib/thor/command.rb:27:in `run'
        from /usr/local/rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/thor-0.19.1/lib/thor/invocation.rb:126:in `invoke_command'
        from /usr/local/rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/thor-0.19.1/lib/thor.rb:359:in `dispatch'
        from /usr/local/rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/thor-0.19.1/lib/thor/base.rb:440:in `start'
        from /usr/local/rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/wordmove-1.2.0/bin/wordmove:6:in `<top (required)>'
        from /usr/local/rbenv/versions/2.1.2/bin/wordmove:23:in `load'
        from /usr/local/rbenv/versions/2.1.2/bin/wordmove:23:in `<main>'


という訳でエックスサーバー用のMovefileの設定を。
前提
・エックスサーバー側WordPressアドレス:http://example.com/vccw/
・エックスサーバーアカウント:”hoge”
・データベース情報は各自ご確認ください。

local:
  vhost: "http://wordpress.local"
  wordpress_path: "/var/www/wordpress"

  database:
    name: "wordpress"
    user: "wordpress"
    password: "wordpress"
    host: "localhost"

staging:
  vhost: "http://example.com/vccw/"
  wordpress_path: "/home/hoge/hoge.xsrv.jp/public_html/vccw" # use an absolute path here

  database:
    name: "hoge_wp"
    user: "hoge_wp"
    password: "password"
    host: "mysqlxx.xserver.jp"
    charset: "utf8"

  exclude:
    - ".git/"
    - ".gitignore"
    - ".sass-cache/"
    - "bin/"
    - "tmp/*"
    - "Gemfile*"
    - "Movefile"
    - "wp-config.php"
    - "wp-content/*.sql"

  # paths: # you can customize wordpress internal paths
  #   wp_content: "wp-content"
  #   uploads: "wp-content/uploads"
  #   plugins: "wp-content/plugins"
  #   themes: "wp-content/themes"
  #   languages: "wp-content/languages"
  #   themes: "wp-content/themes"cd 

  ssh:
    host: "hoge.xsrv.jp"
    user: "hoge"
  #   password: "password" # password is optional, will use public keys if available.
    port: 10022 # Port is optional
    rsync_options: "--verbose" # Additional rsync options, optional
  #   gateway: # Gateway is optional
  #   host: "host"
  #   user: "user"
  #   password: "password" # password is optional, will use public keys if available.

  # ftp:
  #   user: "user"
  #   password: "password"
  #   host: "host"
  #   passive: true

# production: # multiple environments can be specified
#   [...]

wordmoveコマンド実行!

準備は整ったのでゲストマシンにSSH接続してwordmoveコマンドを実行するだけです。

	# ホストマシン
	# ゲストマシンにログイン
	$ vagrant ssh
	
	# ゲストマシンにログイン完了
	# vagrantディレクトリへ
	$ cd /vagrant/
	$ wordmove pull --all
	

という訳でVCCW+WordMoveでエックスサーバーとローカル環境同期できました。
vccw-xserver-04

詰まった点

WordMoveで同期できるまでに数日掛かったのでその間に詰まった点をいくつか。(既に忘れてるのもありますが)

1. 上記に記載の通りMovefileのインデントの位置によるエラー

2. Movefileに記載するエックスサーバー側の ‘wordpress_path’ の値が分からず wordmove コマンドでエラー多発。
どうやらWordPerssをインストールしたディレクトリのフルパスが要るらしく、SSHでエックスサーバーにログイン、WordPressインストールディレクトリへ移動、pwdコマンドで求めることができました。

#Cygwin
$ ssh hoge@hoge.xsrv.jp -p 10022

#エックスサーバー側
$ cd hoge.xsrv.jp/public_html/vccw/
$ pwd
/home/hoge/hoge.xsrv.jp/public_html/vccw

3. Permission denied (publickey,gssapi-with-mic). エラー。
今回は詰まってないと思うけどお困りのツイートもあったし、以前の記事で詰まってたので改めて。

こちらに関しては秘密鍵のパーミッションが他ユーザからアクセス可能(644とか)な状態になっているのが原因。
なので秘密鍵のパーミッションを変更することで解決かなと

	$ chmod 600 /home/ユーザ名/.ssh/id_rsa
	

参考サイト

Mac OS XでエックスサーバーにSSH接続

年末間際にエックスサーバーでSSH接続が出来るようになったと聞いたのでMac OS X環境からアクセスしてみました。
マニュアルを見たところ公開鍵認証方式のみでパスワード認証には対応していないとの事。なのでSSHクライアントからの接続のみかなと思いましたが鍵情報登録したらFilezillaのSFTPにも対応できるみたいですが、うちの環境だとFilezillaが途中で止まりましたね・・・
Tera Termとか使用している人はマニュアルに沿って行けば問題ないと思うのでそちらを参照ください。
xserver-ssh-01

INDEX

  1. サーバーパネルのSSH設定について
  2. [公開鍵認証用鍵ペアの生成]からの設定
  3. [公開鍵登録・設定]からの設定
  4. ターミナルからSSH接続を実行
  5. 参考サイト

サーバーパネルのSSH設定について

xserver-ssh-02
“エックスサーバーコントロールパネル > サーバーパネル > SSH設定”のメニューは[SSH設定] [公開鍵認証用鍵ペアの生成] [公開鍵登録・設定]の3つ。

[SSH設定]ではSSH接続機能のON/OFF切り替えを行う。デフォルトではOFF。

SSH接続設定方法は2通り用意されており、[公開鍵認証用鍵ペアの生成]、[公開鍵登録・設定]となります。設定は後述。

というわけで、[SSH設定]でSSH機能の使用状態をONにし、[公開鍵認証用鍵ペアの生成]からの設定、もしくは[公開鍵登録・設定]からの設定へ。

[公開鍵認証用鍵ペアの生成]からの設定

xserver-ssh-03
1つ目の設定方法、[公開鍵認証用鍵ペアの生成]では公開鍵認証用の鍵ペア(公開鍵・秘密鍵)を自動で生成してくれます。
パスフレーズを入力して「公開鍵認証用の鍵ペア生成(確認)」をクリック、続けて次ページにて「公開鍵認証用の鍵ペア生成(確定)」をクリックで公開鍵・秘密鍵が生成されます。秘密鍵は”サーバID.key”というファイル名でダウンロードされ、公開鍵はサーバ上 /.ssh/authorized_keys へ保存されます。
xserver-ssh-04

ダウンロードされた”サーバID.key”秘密鍵はファイル名を”id_rsa”にリネームし /Users/ユーザ名/.ssh/ に移動。
リネーム時に拡張子.keyが残るのでファイルの「情報を見る」より拡張子を削除する。
xserver-ssh-05

一通り設定が完了したので次の項は飛ばしてターミナルからSSH接続を実行へ。

[公開鍵登録・設定]からの設定

xserver-ssh-06
2つ目の設定方法、[公開鍵登録・設定]ではMacのターミナルで公開鍵認証用の鍵ペア(公開鍵・秘密鍵)を生成し、上図公開鍵部分へ公開鍵を登録します。手順は以下の通り。

ターミナルを起動しssh-keygenを実行し鍵ペアを生成。
保存場所、鍵名を聞かれるのでそのままEnter。

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/ユーザ名/.ssh/id_rsa):

鍵名を変更したい場合は以下の通り。
※鍵名はデフォルトではid_rsa、id_dsa、identity以外登録されていないので /etc/ssh_config の IdentityFileプロパティに追加する必要あり

Enter file in which to save the key (/Users/ユーザ名/.ssh/id_rsa): /Users/ユーザ名/.ssh/hoge_rsa

パスフレーズを求められるので入力。

Enter passphrase (empty for no passphrase):

確認用にもう一度求められるので再度入力。

Enter same passphrase again:

鍵ペアの生成が完了。
xserver-ssh-07

/Users/ユーザ名/.ssh/にid_rsa(秘密鍵)id_rsa.pub(公開鍵)が作成されます。
xserver-ssh-08

id_sra.pubをテキストエディタで開いてコピー。エックスサーバーサーバパネルの[公開鍵登録・設定]の公開鍵部分にペーストして「公開鍵を登録する(確認)」をクリック。続けて次ページにて「公開鍵を登録する(確定)」をクリックでサーバ上に公開鍵情報が登録されます。
xserver-ssh-09
公開鍵はサーバ上 /.ssh/authorized_keys へ保存されます。

xserver-ssh-04

サーバ上に公開鍵、Mac OS X上に秘密鍵が準備できたのでターミナルからSSH接続を実行へ。

ターミナルからSSH接続を実行

2通りのSSH接続設定、[公開鍵認証用鍵ペアの生成]、[公開鍵登録・設定]を行いましたが、共にサーバ上には /.ssh/authorized_keys が登録、Max OS X上には秘密鍵 /Users/ユーザ名/.ssh/id_rsa が保存されたのでターミナルからSSH接続を実行して行きます。

ターミナル起動。
$ ssh サーバID@サーバID.xsrv.jp -p 10022 で接続。(サーバIDは仮に”hogehoge”とする)
※接続ポートはエックスサーバー側で10022に制限されているので-pオプションで使用ポートを指定します。

$ ssh hogehoge@hogehoge.xsrv.jp -p 10022

なお、/Users/ユーザー名/.ssh/id_rsaのパーミッションが他のユーザからアクセス可能なもの(644等)の場合以下エラーが発生するので秘密鍵のパーミッションは600にしておく。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/Users/ユーザ名/.ssh/id_rsa' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: /Users/ユーザ名/.ssh/id_rsa
Permission denied (publickey,gssapi-with-mic).

パーミッション変更方法は以下の通り。

$ chmod 600 /Users/ユーザ名/.ssh/id_rsa

再度、SSH接続実行。初回接続時は以下が表示されるかもしれない(うろ覚えです)ので”yes”を入力してEnter。

The authenticity of host '[hogehoge.xsrv.jp]:10022 ([xxx.xxx.xxx.xxx]:10022)' can't be established.
RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Are you sure you want to continue connecting (yes/no)? 

ポップアップが開きSSHキー”id_rsa”のパスワードを聞かれるので登録したパスフレーズを入力しOK。
xserver-ssh-10

これでエックスサーバーにSSH接続する事ができました。
試しにWordPressインストールディレクトリに移動し一覧を表示してみました。
xserver-ssh-11

というわけで年末と全くない記事でしたが来年もよろしくお願い致します。

参考サイト