開発環境で試したのでその方法を記載しておきます。
まず、エラーの意味についてですが、これはBitbucketのレポジトリにアクセスできないという意味です。
fatal: Could not switch to 'git@bitbucket.org/hogehoge': No such file or directory
下記のWarningは気にする必要はありません。なんらかのエラーが出た時に私の環境でも出ていました。
Error Output:
================
Warning: Permanently added '111.111.111.xxx' (RSA) to the list of known hosts.
下準備
下記が~/.ssh/config
です。パーミッションも気をつける必要があります。SSHコマンドで接続できているようなので気にする必要はありません。
私の開発環境ではkeychain
をインストールして試しました。実際のやり方は本回答下部のSSHパスフレーズ対応を参照してください。
- /home/user1:
700
以下(750以下でも良いかもしれません)
- ~/.ssh:
700
以下
- ~/.ssh/id_rsa:
600
以下
- ~/.ssh/id_rsa.pub:
644
以下
ssh
1# ~/.ssh/config
2Host bitbucket.org
3 HostName bitbucket.org
4 User git
5 identityFile ~/.ssh/bitbucket/id_rsa
6 Port 22
7 TCPKeepAlive yes
8 IdentitiesOnly yes
9 ForwardAgent yes
10
11Host production
12 HostName 11.111.111.xxx
13 User linux
14 identityFile ~/.ssh/id_rsa
15 Port 22
16 TCPKeepAlive yes
17 IdentitiesOnly yes
18 ForwardAgent yes
下記のようなコマンドを実行して、パスフレーズなしでログインが成功すれば問題ありません。
bash
1ssh -T bitbucket.org
2ssh production
また、Bitbucketへのアクセスを確認するために下記を実行して確認しました。パスフレーズなしでgit clone
できれば確認終了です。
bash
1mkdir /tmp/test
2cd /tmp/test
3git clone git@bitbucket.org:ユーザー名/レポジトリ.git
Deployer
下記が開発環境で試したdeployer-4.x
のインストール方法です。
bash
1curl -LO https://deployer.org/releases/v4.3.1/deployer.phar
2sudo mv deployer.phar /usr/local/bin/dep
3sudo chmod 755 /usr/local/bin/dep
4composer require deployer/deployer --dev
5dep init
6#[common]を選択
下記は開発環境で試したdeployer-4.x
のスクリプトです。deploy:lock
は何故か私の環境だと失敗してしまったのでコメントアウトしてあります。
php
1// deploy.php
2<?php
3namespace Deployer;
4require 'recipe/common.php';
5
6// Configuration
7set('ssh_type', 'native');
8set('ssh_multiplexing', false);
9
10set('repository', 'git@bitbucket.org:ユーザー名/レポジトリ.git');
11set('shared_files', []);
12set('shared_dirs', []);
13set('writable_dirs', []);
14
15// Servers
16server('production', '11.111.111.xxx', 22)
17 ->user('linux')
18 ->configFile('~/.ssh/config')
19 ->forwardAgent()
20 ->set('branch', 'master')
21 ->set('deploy_path', '/var/www/hogehoge/hogehoge');
22
23// Tasks
24desc('プロジェクト名');
25task('deploy', [
26 'deploy:prepare',
27// 'deploy:lock',
28 'deploy:release',
29 'deploy:update_code',
30 'deploy:shared',
31 'deploy:writable',
32 'deploy:vendors',
33 'deploy:clear_paths',
34 'deploy:symlink',
35 'deploy:unlock',
36 'cleanup',
37 'success'
38]);
39
40// [Optional] if deploy fails automatically unlock.
41//after('deploy:failed', 'deploy:unlock');
下記は実際に実際にデプロイした時のコマンドです。
bash
1dep deploy
2#OR
3dep deploy production
4
5#エラーが出る時は
6dep deploy -vvv production
うまくいけば、デプロイ先サーバーの下記パスにソースが置かれます。
ls /var/www/hogehoge/hogehoge/current/ #下記のシンボリックリンク
ls /var/www/hogehoge/hogehoge/releases/1
SSHパスフレーズ対応
ローカルのSSHに公開キー設定をしてパスフレーズなしでSSH接続できるようにssh-agent
を使用するか、keychain
をインストールして対応します。
ssh-agent
を使用する場合は(keychainは使わない)、サーバーを再起動した際に必ず下記コマンドを実行します。
bash
1eval `ssh-agent`
2sed '/^export SSH_AUTH_SOCK/d' -i ~/.bashrc
3echo "export SSH_AUTH_SOCK="$SSH_AUTH_SOCK >> ~/.bashrc
4
5#デプロイ先サーバー用SSH鍵
6ssh-add ~/.ssh/id_rsa
7#Enter passphrase for /home/user1/.ssh/id_rsa: ←ここにパスフレーズ入力
8
9#Bitbucket用SSH鍵
10ssh-add ~/.ssh/bitbucket/id_rsa
11#Enter passphrase for /home/user1/.ssh/bitbucket/id_rsa: ←ここにパスフレーズ入力
keychain
を使用する場合は下記のようにします。keychain
は上記ssh-agent
をいい感じに自動的に行ってくれます。
CentOS6
を使用している場合は、下記のようにインストールします。
bash
1#CentOS6
2sudo yum -y install yum-priorities
3sudo yum -y install yum-plugin-priorities
4sudo yum -y install "http://mirror.ghettoforge.org/distributions/gf/el/6/gf/x86_64/"$(curl -sL http://mirror.ghettoforge.org/distributions/gf/el/6/gf/x86_64/ |
5 egrep gf-release-.+.rpm | sed -r 's/^.+?(gf-release-.+.rpm).+$/\1/')
6sudo rpm --import /etc/pki/rpm-gpg/*
7sudo yum -y --enablerepo=gf install keychain
Ubuntu
を使用している場合は、下記のようにインストールします。
bash
1#Ubuntu
2sudo apt install keychain
上記インストールが完了したら、下記コマンドでSSH鍵を登録します。
bash
1keychain ~/.ssh/id_rsa ~/.ssh/bitbucket/id_rsa
2#Enter passphrase for /home/user1/.ssh/id_rsa: ←ここにパスフレーズ入力
3#Enter passphrase for /home/user1/.ssh/bitbucket/id_rsa: ←ここにパスフレーズ入力
4
5source $HOME/.keychain/$HOSTNAME-sh
~/.bashrc
または、~/.bash_profile
に下記のように追加します。サーバーを再起動した場合はログイン時にパスフレーズを聞かれるので、必ずログインしてパスフレーズを入力します。
bash
1cat << 'EOS' >> ~/.bashrc
2
3if [ -d "$HOME/.keychain" ]; then
4 #デプロイ先サーバー用SSH鍵
5 [ -f "$HOME/.ssh/id_rsa" ] && /usr/bin/keychain ~/.ssh/id_rsa
6
7 #Bitbucket用SSH鍵
8 [ -f "$HOME/.ssh/bitbucket/id_rsa" ] && /usr/bin/keychain ~/.ssh/bitbucket/id_rsa
9
10 source $HOME/.keychain/$HOSTNAME-sh
11fi
12
13EOS
これで、パスフレーズなしでSSH接続できるようになったので、実際にBitbucketとデプロイ先サーバーに接続確認をします。
bash
1ssh -T bitbucket.org
2ssh production