this の指示に従おうとしています。ローカルgitリポジトリがあり、git Pushを実行する場合、リポジトリをEC2インスタンスにプッシュする必要があります。
しかし、上記のチュートリアルで_git Push Origin master
_を実行すると、IDファイルを指定しなかったためPermission denied (publickey)
エラーが発生します。
たとえば、次のようにEC2にログインします:_ssh -i my_key.pem [email protected]
_
だから、ここで似たようなことをすることができます:_git -i my_key.pem Push Origin master
_または_.git/config
_にIDファイルを設定します
それで、どのように設定できますか?
更新:_git config -l
_の出力
_user.name=my name
[email protected]
github.user=userid
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
remote.Origin.url=ec2_id@my_e2_ip_address:express_app
remote.Origin.fetch=+refs/heads/*:refs/remotes/Origin/*
_
更新(@Jonの コメント から):
奇妙なパスにキーがある場合は、_ssh-add /private/key/path
_を実行するだけです。これは私のために働いた。
ローカルsshキーをAmazonにコピーするには、これを試してください
cat ~/.ssh/id_?sa.pub | ssh -i Amazon-generated-key.pem ec2-user@Amazon-instance-public-dns "cat >> .ssh/authorized_keys"
もちろん、キーとAmazon ec2パブリックDNSの名前を置き換えます。
その後、Amazonでリモートをセットアップできるようになります
here にリストされている指示は私にとってより有用でした。
リンクから:
~/.ssh/config
を調整して追加します:
Host example
Hostname example.com
User myuser
IdentityFile ~/.ssh/other_id_rsa
リポジトリとしてsshホストエイリアスを使用します。
$ git remote add Origin example:repository.git
$ git pull Origin master
そして、other_id_rsa
キーを使用する必要があります!
ローカルマシンで、〜/ .ssh/configを編集して追加します:
Host example
Hostname example.com
User myuser
IdentityFile ~/.ssh/YOURPRIVATEKEY
「ssh example」でインスタンスにログインできるはずです。秘密鍵はchmod 400でなければなりません。「ssh -i mykey.pem username @ Host」を使用せずにsshできるようになったら、次の手順を実行します。
EC2インスタンスで、ベアリポジトリを初期化します。これは、排他的にプッシュするために使用されます。慣例では、拡張子「.git」をフォルダー名に追加します。これは、通常、「プロジェクト」フォルダー内に.gitフォルダーとしてあるローカルリポジトリとは異なるように見える場合があります。ベアリポジトリ(定義上)には作業ツリーがアタッチされていないため、通常の非ベアリポジトリのように簡単にファイルを追加することはできません。これは、彼らが行う方法です。 ec2インスタンスで:
mkdir project_folder.git
cd project_folder.git
git init --bare
次に、ローカルマシンに戻って、リモートのセットアップ時にsshホストエイリアスを使用します。
git remote add ec2 EXAMPLEHOSTFROMSSHCONFIG:/path/to/project_folder.git
これで、次のことができるはずです。
git Push ec2 master
これで、コードは問題なくサーバーにプッシュされます。ただし、この時点での問題は、ec2インスタンスのwwwフォルダーに、Webサーバーの実行に必要な実際の「作業ファイル」が含まれていないことです。したがって、ec2にプッシュしたときに実行される「フック」スクリプトをセットアップする必要があります。このスクリプトは、ec2インスタンスの適切なフォルダーに実際のプロジェクトファイルを取り込みます。
したがって、ec2インスタンスで、project_folder.git/hooksディレクトリに移動します。次に、「post-receive」というファイルを作成し、それをchmod 775します(実行可能である必要があります)。次に、次のbashスクリプトを挿入します。
#!/bin/bash
while read oldrev newrev ref
do
branch=`echo $ref | cut -d/ -f3`
if [ "ec2" == "$branch" -o "master" == "$branch" ]; then
git --work-tree=/var/www/example.com/public_html/ checkout -f $branch
echo 'Changes pushed to Amazon EC2 PROD.'
fi
done
ローカルマシンで「git Push ec2 master」を実行すると、コードがベアレポジトリにプッシュされ、受信後フックスクリプトがWebサーバーが読み取るように構成されている適切なフォルダーにファイルをチェックアウトします。
SSHキーを生成してEC2インスタンスにアップロードする必要があります。このチュートリアルに従ってください: http://alestic.com/2010/10/ec2-ssh-keys
これが最も簡単な方法であることがわかりました: https://Gist.github.com/matthewoden/b29353e266c554e04be8ea2058bcc2a
基本的に:
ssh-add /path/to/keypair.pem
(「-add」はsshの後に正しい必要があります)
動作しているかどうかを確認します:ssh ubuntu@crazylongAWSIP
(ユーザー名がubuntuではない可能性があります)
その後、ec2でgitリポジトリをセットアップし、プッシュします:
git remote add Origin [email protected]:/path/to/your/repo-name.git
git config --global remote.Origin.receivepack "git receive-pack" # needed for aws ec2 stuff.
git Push Origin master
あなたのオプションは、あなたのec2に「裸の」gitリポジトリを設定することです(つまり、他のgitリポジトリはそこからプルしてプッシュすることができますが、ファイルを保持しません)、または通常のリポジトリとプッシュを設定することができますそれに直接(あなたのec2に絶えずsshすることなくあなたのec2にローカルの変更をプッシュしたい場合、私の好み).
Ec2にNORMALリポジトリを設定する場合は、ec2にsshして、git init
必要な場所で、これを実行します。
git config receive.denyCurrentBranch updateInstead
「-現在のブランチを拒否する」の説明については、 gitリポジトリにプッシュできません を参照してください。
ssh-keygen
を実行しますローカル~/.ssh/
ディレクトリに、id_rsa.pub
という名前の公開鍵ファイルが表示されるはずです。このファイルの内容をにある/etc/ssh/authorized_keys
ファイルにコピーしますリモートサーバー。内容をコピーして貼り付けるか、最初にファイルをリモートサーバーにアップロードして次のコマンドを使用します。
cat id_rsa.pub >> /etc/ssh/authorized_keys
ここには新しいものを投稿していませんが、特定のケースに対処するために上記の回答を掘り下げなければなりませんでした。 EC2にUbuntuインスタンスがあります。
インスタンスにログインするには、以下を行う必要がありました。
ssh -i "pemfile.pem" ubuntu@very-long-Amazon-address
キーファイル「pemfile.pem」は引用符で囲む必要がありました。
リモートを追加しました:
remote add Origin ubuntu@very-long-Amazon-address/home/ubuntu/git/REPO/gitfile.git
しかし、プッシュしようとしたとき:
git Push Origin master
私が得た:
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
修正するために、私は:
/<path to pemfile>/pemfile.pem
それは私に応答を与えました、
Identity added: /<path to pemfile>/pemfile.pem (/<path to pemfile>/pemfile.pem )
その後、Pushはうまくいきました。
ソース管理を介して展開するときにpermission deniedが表示され、その理由がわかりませんでした。 sshキーを作成しているユーザー(ubuntuという名前で、ec2サーバーの推奨ログインでもあります)がcap deploy(root)を担当したユーザーではないことに気付きました。 rootでssh-keygenを実行し、そのsshキーをデプロイキーとしてbitbucketにアップロードすると、問題が解決しました。
これが私にとって最適な最も簡単な方法です...私はリポジトリのクローン作成に問題がありました...作成したSSHキーを認識していませんでした...設定ファイルを変更する代わりに、REALをコピーしました接続しようとしていたsshキーとこれをbitbucketに追加しました...コマンドは次のとおりです。
Sudo vi /root/.ssh/id_rsa.pub
VIを使用してREAL RSAキーを開き、コンテンツをコピーしてbitbucketに貼り付けました...完了!
私はこれには遅すぎることを知っていますが、ほんの数秒でEC2 gitリポジトリに正常にプッシュしたこの記事を共有したかっただけです
http://shirtdev.wordpress.com/2011/05/04/setting-up-a-git-repository-on-an-Amazon-ec2-instance/