読者です 読者をやめる 読者になる 読者になる

かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

VirtualBoxの開発環境とSublime Textで同期する!

VirtualBoxのシェアフォルダを利用して
ホストOSのフォルダをVirtualBox(CentOS)の開発環境から見てって感じで開発をしていました。

が、VirtualBoxのシェアフォルダが超絶遅くてストレスだったので
CentOSの開発環境をSublimeTextのSFTPパッケージを利用して同期することにしました。
参考:
Sublime Text 2 の SFTP パッケージでファイルの自動アップロード&モニタリング機能を試してみた | memobits

1. CentOSのログイン設定

/etc/ssh/sshd_config にsshでのログイン設定が書かれています。

vi /etc/ssh/sshd_config
# 使用するport
Port 22
# sshでのログインを許可
PubkeyAuthentication yes
# パスワードでのログインを禁止する場合はno
PasswordAuthentication no
# パスワードなしでログインさせない
PermiyEmptyPasswords no
# rootでのログインを禁止する場合はno
PermitRootLogin no
# ログインできるユーザーを限定する場合
AllowUsers ユーザー名1 ユーザー名2


設定をしたらsshdを再起動

service sshd restart

2. SublimeTextにSFTPパッケージをインストール。

コマンド + ship + P でパッケージコントロールを開いて
install Package、SFTPを検索してインストール!

3. 同期の設定をする

同期させたいフォルダを作って、SublimeTextのサイドバーに追加。
フォルダを右クリックして、「SFTP/FTP」→「Map to Remote」を選択。

sftp-config.json**というファイルが作られます。

{
    // The tab key will cycle through the settings when first created
    // Visit http://wbond.net/sublime_packages/sftp/settings for help
    
    // sftp, ftp or ftps
    "type": "sftp",
 
    "save_before_upload": true,
    "upload_on_save": false,
    "sync_down_on_open": false,
    "sync_skip_deletes": false,
    "confirm_downloads": false,
    "confirm_sync": true,
    "confirm_overwrite_newer": false,
    
    "host": "example.com",
    "user": "username",
    //"password": "password",
    //"port": "22",
    
    "remote_path": "/example/path/",
    "ignore_regexes": [
        "\\.sublime-(project|workspace)", "sftp-config(-alt\\d?)?\\.json",
        "sftp-settings\\.json", "/venv/", "\\.svn", "\\.hg", "\\.git",
        "\\.bzr", "_darcs", "CVS", "\\.DS_Store", "Thumbs\\.db", "desktop\\.ini"
    ],
    //"file_permissions": "664",
    //"dir_permissions": "775",
    
    //"extra_list_connections": 0,
 
    "connect_timeout": 30,
    //"keepalive": 120,
    //"ftp_passive_mode": true,
    //"ssh_key_file": "~/.ssh/id_rsa",
    //"sftp_flags": ["-F", "/path/to/ssh_config"],
    
    //"preserve_modification_times": false,
    //"remote_time_offset_in_hours": 0,
    //"remote_encoding": "utf-8",
    //"remote_locale": "C",
}

このファイルの必要な部分を変更して同期の設定をします。

  // ゲストOS(CentOS)のホストに変更
  "host": "192.168.56.101",
  // ゲストOSのログインユーザーに変更
  "user": "kikikikii",
  // ゲストOSの開発環境のパスに変更 (同期元)
  "remote_path": "/www/homepage/",
  // sshで繋ぐ場合はコメントアウトを外し
  //ホストOS(Mac)のsshキーの場所を記述
  "ssh_key_file": "~/.ssh/id_rsa",

  // portがCentOSの設定と違っていたら
  //コメントアウトを外して合わせる
  //"port": "22",
  // パスワードで繋がないようにコメントアウト
  //"password": "password",

4. CentOSの開発環境を環境にSublimeTextで同期してLocalに持ってくる

同期設定をしたフォルダを右クリック
「SFTP/FTP」→「Sync Remote -> Local...」を選択すれば
SublimeTextの下にコンソールが開いて同期が始まります。
逆にCentOSにアップしたい場合は「SFTP/FTP」→「Sync Local -> Remote...」で。

5. 同期がエラーになってしまう場合

rootユーザーではSyncできるのに、
指定したユーザーではエラーになって同期できないトラブルに遭遇しました。
ターミナルからsftpでCentOSに繋がるかどうか試します。

sftp username@192.168.56.101

なんかエラーが返ってきました

Connecting to hostname...
Received message too long 1970496800

このエラーで検索したところbashrcに問題があるっぽい。
サーバーにsftpできないときは - console.lealog();

CentOSにSublimeTextで同期するユーザーでログインして、bashrcを修正します。

ssh username@192.168.56.101

vi .bashrc

bashrcの先頭に下記を追記して保存

# .bashrc for interactive terminal
[ -z "$PS1" ] && return

ターミナルからsftpで接続できる事を確認して、
再びSublimeTextで「SFTP/FTP」→「Sync Remote -> Local...」
無事同期することができました。

すごくハマッた!!