Vagrant仮想サーバーのファイルをNotepad++のNppFTPを使い直接編集

Vagrant を使った WordPress の開発環境 VAW(Vagrant Ansible WordPress)を最近使っているのですが、同期フォルダー以外の設定用ファイルの編集等で vi エディタを使わなければならない場合にちょっとストレスがたまります (>_<)

今回は、私のようになかなか vi エディタになれなくて苦労している方に、仮想サーバー上のファイルを vi エディタを使わずに、Windows側のエディタから直接編集する方法を紹介します

これまでに、仮想サーバーをあまり意識せずに WordPress関連の開発が出来るように データベースや、リモートデバッグ関連の記事を紹介してきましたが、さらに vi エディタを使用しなくてすむようになれば、サーバーへのハードルがまた少し低くなるかも知れません (^^)

VAW(Vagrant Ansible WordPress) のMySQLデータベースにHeidiSQLで接続する
HeidiSQLで VAW(Vagrant Ansible WordPress)のMySQLデータベースにSSHポートフォワード接続する手順を紹介します。 これでデータベース処理の確認やデバッグが格段に便利になります (^^)
VAW(Vagrant Ansible WordPress) のMySQLデータベースにHeidiSQLで接続する
VAW(Vagrant Ansible WordPress) で NetBeans を使いリモートデバッグ!
VAW(Vagrant Ansible WordPress) で WordPressのプラグインやテーマを NetBeans を使ってリモートデバッグする方法を紹介します (^^)
VAW(Vagrant Ansible WordPress) で NetBeans を使いリモートデバッグ!

※ここで紹介するのは Windowsから Vagrant VAW の vagrant/root ユーザーのファイルをSFTPを利用してリモート編集する方法です。動作環境が異なる場合はうまくいかない場合もあると思います

Windows側エディター

私は、普段 NetBeans IDE を使っているのですが、Netbeansは仮想サーバー内の個別の設定ファイル等をちょっと編集したいという場合には適していません

そこで NetBeans のプラグインを探すとremote file system というそれらしいプラグインがあったのですが、やってみるとうまく動作しません (^_^;)

ということで 最近は、オープンソースで開発されているエディタもたくさんあるので、軽量で手軽に使用できるエディターを調べてみました

例えば ATOM, Brackets, Visual Studio Code 等のモダンで高機能なエディタは、プラグインで様々な拡張機能を追加出来るようになっています

どれも無料で利用できるので試してみると、各エディタは、それぞれ特徴があり使い勝手や応答性違いがあるのですが、どれもプラグインを導入して機能を拡張出来るようになっています

これらのエディターを試してみて意外に好印象だったのは Visual Studio Code だったのですが、今回の目的の SFTP機能に関しては、残念ながらどのエディタでも自分の望むようなプラグインは見つけられませんでした

そこで、定番的なエディターも試して見るかと Notepad++ エディターをインストールして NppFTP プラグインを試してみるとまさにドンピシャでした (^^)

今まで NotePad を置き換えるちょっと高機能なエディターという程度の認識しかなく、使ったことがなかったのですが NotrPad++ と NppFTP の組み合わせはとても強力です

NotePad++

Notepad++ は、Windows で動作するフリーソフトのエディターで、C++言語で作成されているので比較的軽量できびきび動作し、プラグイン機能で様々な機能拡張が行えるようになっています

最近人気のエディターと比較すると若干古さは感じますが、どのエディターでも一長一短があるので、今回の目的においては最強のエディターのような気がします (^^)

インストール

Notepad++サイトからダウンロードしてインストールすればOKですが、今回は Notepad++ EUC-JP 対応版 というカスタム版を使ってみました

このカスタム版は、インストーラ形式ではありませんのでダウンロードした npp.6.8.8.bin.zip ファイルを適当なフォルダーで解凍するだけです

その中の notepad++.exe をダブルクリックすればエディタが起動します

初期設定

メニューの 設定→環境設定 をクリックします

Notepad++_Settings

最小限必要と思われる設定として、新規作成 項目のコードを UTF-8 にセットします

Notepad++_utf8

他の項目に関してはお好みで設定して下さい

設定→スタイル設定 からは各言語ごとのフォントやカラーの設定を行うことも出来ます

NppFTP プラグイン

今回の目的である NppFTP プラグイン を導入します

メニューから プラグイン→Plugin Maneger→Show Plugin Maneger をクリックします

Notepad++_NppFTP_Plugin

Available から NppFTP を探してチェックしたら Install ボタンをクリックします

自動的にプラグインがダウンロードされ、リスタートの確認ダイアログが表示されるのでクリックしてプラグインを有効化します

ツールバーの右端に NppFTP のアイコンが追加されるのでクリックします

Notepad++_NppFTP_window

接続先情報の登録

NppFTP 部の右から2つ目の Settings アイコンをクリックします

今回は  VAW(Vagrant Ansible WordPress) 仮想マシンの vagrantroot ユーザーの2つの接続情報を作成します

General Setting

NppFTP_general_setting

キャッシュファイルの場所を指定します。デフォルトではプラグインフォルダー下の Config/NppFTP/Cache が使われますので、とくに変更する必要はありません

サーバー上のファイルは、実際にはエディタが直接編集しているわけではなく、自動的に下記動作を行うことであたかも直接編集しているように見せています

  1. 選択したファイルをダウンロードしてキャッシュに保存
  2. キャッシュデータの編集
  3. キャッシュデータをサーバーにアップロード
vagrant ユーザー登録

Profile Settings

Add New をクリックして接続先情報を登録します

はじめに VAW の通常のユーザー vagrant の接続情報を作成します

VAW_profile1

VAWをデフォルト状態で使用している場合の接続情報です

ユーザー vagrant のホームディレクトリ(/home/vagrant)以下を初期のリモートアクセスディレクトリにしています

鍵ファイルによる認証を使用していますので Password は空欄のままでOKです

VAW_profile2

鍵ファイルの登録

VAWの鍵ファイルは、BOXイメージと同じフォルダーにある vagrant_private_key ファイルを指定します

エクスプローラーの隠しファイルを表示する設定になっていれば下記位置に見えるはずです

C:\Users\[User_Name]\.vagrant.d\boxes\vaw-VAGRANTSLASH-centos6-default\0.1.0\virtualbox\vagrant_private_key

このファイルを Private Key File として登録します

隠しファイルの表示

サーバー側のファイルを探すときに隠しファイルも表示させたい場合は “-al” パラメータをセットします

VAW_profile3

Transfer と Cache の項目は、そのままでOKです

これで1回クローズして VAW 接続情報を保存します

root ユーザー登録

次に root ユーザー用の接続情報を作成します

これは、 vagrant ユーザーで接続した場合にアクセス出来ないファイルに対して編集を行いたい時に root ユーザー権限でそのファイルにアクセスするための接続情報です

VAW_root_profile

vagrant ユーザーの接続情報の違いは、ユーザー名が root になる部分と、初期のリモートディレクトリが / になる部分です

他の設定は同じですので、割愛します

VAW仮想サーバー(Cent OS)側の設定

まずは VAW を起動させます

ここでは、VagrantのVAW環境を構築する手順は省略しますが、Vagrant や VAW に関しては下記記事中で紹介していますので参考にして下さい

VAW(Vagrant Ansible WordPress) のMySQLデータベースにHeidiSQLで接続する
HeidiSQLで VAW(Vagrant Ansible WordPress)のMySQLデータベースにSSHポートフォワード接続する手順を紹介します。 これでデータベース処理の確認やデバッグが格段に便利になります (^^)
VAW(Vagrant Ansible WordPress) のMySQLデータベースにHeidiSQLで接続する

VAWが起動していれば、vagrant ユーザー権限でアクセスできる範囲のファイルに対しては特別な設定をしなくてもアクセスすることが出来ます

作成した VAW 接続をクリックするとサーバー上のホームディレクトリ以下がエクスプローラ状に表示されます

NppFTP_VAW_Connect

これで編集したいファイルを選択してダブルクリックすると表示されます

ファイルを編集して保存(Ctrl sキー)すると自動的にサーバーへアップロードして更新されます

あたかも直接サーバー上のファイルを編集しているかのような自然な動作です (^^)

root 権限のファイルを編集するには

大抵の場合は、vagrant ユーザー権限で済むかも知れませんが、たまに root 権限のファイルを編集したい場合があるかもしれません

そんな時でも root ユーザーで接続すればファイルにアクセスすることが可能です。
vagrant ssh で接続してから sudo vi を使う必要はありません

但し、VAWを含め通常の仮想マシンでは root ユーザーの SSH/SFTP 接続は禁止されていることが多いので、作成した VAW-root 接続をクリックしても接続に失敗します

NppFTP_root_error

接続できないのは、セキュリティーを考慮して禁止されているからです

サーバーの /etc/ssh/sshd_config ファイルをみると PermitRootLogin no とか DenyUsers root などの記述がされていると思います

また、/root ディレクトリ下の .sshauthorized_keys  ファイルを用意する必要もあります

そこで、これらの設定の書き換えと vagrant ユーザーで使用しているキーファイルを root ユーザーにも使えるようにコピーする処理をシェルプログラムとして作りました

#!/bin/bash

if [[ $# != 1 ]]; then
    echo "[Info]: Usage: sudo /vagrant/ssh_root.sh <enable|disable>"
    exit 1
else
    SSH_MODE=$1
fi

if [[ $SSH_MODE == 'enable' ]]; then
	if [[ ! -d /root/.ssh ]]; then
		sudo mkdir -m 700 /root/.ssh 
	fi
	
	if [[ ! -f /root/.ssh/authorized_keys ]]; then
		echo 'SSH root enable'
		cp /home/vagrant/.ssh/authorized_keys  /root/.ssh/authorized_keys
		sed -i -e "s/^PermitRootLogin no/PermitRootLogin yes/" "/etc/ssh/sshd_config"
		sed -i -e "s/^DenyUsers root/#DenyUsers root/" "/etc/ssh/sshd_config"
		service sshd restart
	fi

elif [[ $SSH_MODE == 'disable' ]]; then
	if [[ -f /root/.ssh/authorized_keys ]]; then
		echo 'SSH root disable'
		rm /root/.ssh/authorized_keys
		sed -i -e "s/^PermitRootLogin yes/PermitRootLogin no/" "/etc/ssh/sshd_config"
		sed -i -e "s/^#DenyUsers root/DenyUsers root/" "/etc/ssh/sshd_config"
		service sshd restart
	fi

fi

このシェルプログラムを ssh_root.sh ファイル名で VAW プロジェクトフォルダーに保存します

このスクリプトを管理者権限で実行すれば簡単に root からの接続を有効化/無効化することが出来ます

vagrant ssh で接続してターミナルから実行できます

  • 有効化する場合: sudo /vagrant/ssh_root.sh enable
  • 無効化する場合: sudo /vagrant/ssh_root.sh disable

開発環境では、これも面倒なので VAW プロジェクトフォルダーの Vagrantfile を一部修正して、プロビジョニング時に有効化させてしまいます

50行目辺りに1行追加します

#vagrant ssh/sftp root user login enable/disable
config.vm.provision :shell, privileged: true, path: "ssh_root.sh", args: "enable"

変更後の Vagrantfile

# -*- mode: ruby -*-
# vi: set ft=ruby :

## Vagrant Settings ##

vm_box                = 'vaw/centos6-default'
vm_box_version        = '>= 0'
vm_ip                 = '192.168.46.49'
vm_hostname           = 'vaw.local'
vm_document_root      = '/var/www/html'

public_ip             = ''

## That's all, stop setting. ##

provision = <<-EOT
  VERSION=$(awk '{print $3}' /etc/*-release)
  if [[ $VERSION =~ ^release ]]; then
    VERSION=$(awk '{print $4}' /etc/*-release)
  fi

  echo '6' > /etc/yum/vars/releasever

  yum clean all
  yum -y install epel-release

  rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm

  yum -y install ansible
  ansible-playbook /vagrant/site.yml -c local -v --extra-vars "HOSTNAME=#{vm_hostname} DOCUMENT_ROOT=#{vm_document_root}"
EOT

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  config.vm.box = vm_box
  config.vm.box_version = vm_box_version

  config.vm.network :private_network, ip: vm_ip
  config.vm.hostname = vm_hostname

  if public_ip != ''
    config.vm.network :public_network, ip: public_ip
  end

  config.vm.synced_folder 'wordpress/', vm_document_root, :create => 'true'

  #vagrant ssh/sftp root user login enable/disable
  config.vm.provision :shell, privileged: true, path: "ssh_root.sh", args: "enable"
  config.ssh.forward_agent = true

  config.vm.provider "virtualbox" do |vb|
    # vb.gui = true
    # Use VBoxManage to customize the VM. For example to change memory:
    vb.customize [
      "modifyvm", :id,
      "--memory", "1536",
      '--natdnshostresolver1', 'on',
      '--natdnsproxy1', 'on',
    ]
  end

  config.vm.provision :shell, :inline => provision

end


これで vagrant provision を実行すれば root で接続できるようになります (^^)

NppFTP_root_access

※rootからの接続はセキュリティ的には問題あるので、開発環境だけにしておくよう注意です

普段は vagrant ユーザーで接続して、必要な場合のみ root ユーザーで接続するよう使い分けるのがよいと思います

以上

Vagrant 仮想サーバーの設定ファイルをちょっと編集したいという場合に、vi エディタを使わずに、Windows側のエディタから直接編集出来る方法を紹介しました

 


まとめ記事紹介

go-to-top