web-dev-qa-db-ja.com

EC2でgitにプッシュする方法

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_を実行するだけです。これは私のために働いた。

75
zengr

ローカル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でリモートをセットアップできるようになります

48
realgt

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キーを使用する必要があります!

27
TinyTimZamboni

ローカルマシンで、〜/ .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サーバーが読み取るように構成されている適切なフォルダーにファイルをチェックアウトします。

19
devdrc

SSHキーを生成してEC2インスタンスにアップロードする必要があります。このチュートリアルに従ってください: http://alestic.com/2010/10/ec2-ssh-keys

5
Jon

これが最も簡単な方法であることがわかりました: 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リポジトリにプッシュできません を参照してください。

2
rikkitikkitumbo
  1. ssh-keygenを実行しますローカル
  2. local~/.ssh/ディレクトリに、id_rsa.pubという名前の公開鍵ファイルが表示されるはずです。このファイルの内容をにある/etc/ssh/authorized_keysファイルにコピーしますリモートサーバー

内容をコピーして貼り付けるか、最初にファイルをリモートサーバーにアップロードして次のコマンドを使用します。

cat id_rsa.pub >> /etc/ssh/authorized_keys

2
Alastair

ここには新しいものを投稿していませんが、特定のケースに対処するために上記の回答を掘り下げなければなりませんでした。 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はうまくいきました。

1
guero64

ソース管理を介して展開するときにpermission deniedが表示され、その理由がわかりませんでした。 sshキーを作成しているユーザー(ubuntuという名前で、ec2サーバーの推奨ログインでもあります)がcap deploy(root)を担当したユーザーではないことに気付きました。 rootでssh-keygenを実行し、そのsshキーをデプロイキーとしてbitbucketにアップロードすると、問題が解決しました。

0
Danny

これが私にとって最適な最も簡単な方法です...私はリポジトリのクローン作成に問題がありました...作成したSSHキーを認識していませんでした...設定ファイルを変更する代わりに、REALをコピーしました接続しようとしていたsshキーとこれをbitbucketに追加しました...コマンドは次のとおりです。

 Sudo vi /root/.ssh/id_rsa.pub

VIを使用してREAL RSAキーを開き、コンテンツをコピーしてbitbucketに貼り付けました...完了!

0
rckehoe

私はこれには遅すぎることを知っていますが、ほんの数秒でEC2 gitリポジトリに正常にプッシュしたこの記事を共有したかっただけです

http://shirtdev.wordpress.com/2011/05/04/setting-up-a-git-repository-on-an-Amazon-ec2-instance/

0
JoenasE