我想按照这个指示.我有一个本地git repo,当我进行git推送时,我需要将repo推送到我的EC2实例.
但是,在上面的教程中,当我这样做时git push origin master,我收到Permission denied (publickey)错误,因为我没有指定身份文件.
说,我这样登录EC2: ssh -i my_key.pem username@11.111.11.11
那么,我可以在这里做类似的事情:git -i my_key.pem push origin master或者设置身份文件.git/config
那么,我该如何设置呢?
更新:输出 git config -l
user.name=my name
user.email=my_email_addreess@gmail.com
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/*
Run Code Online (Sandbox Code Playgroud)
更新(来自@ Jon的评论):
如果你的钥匙在奇数路径上运行ssh-add /private/key/path.这对我有用.
rea*_*lgt 49
要将本地ssh密钥复制到亚马逊,请尝试此操作
cat ~/.ssh/id_?sa.pub | ssh -i amazon-generated-key.pem ec2-user@amazon-instance-public-dns "cat >> .ssh/authorized_keys"
Run Code Online (Sandbox Code Playgroud)
当然,取代密钥和亚马逊ec2公共DNS的名称.
然后,您就可以在亚马逊上设置遥控器了
Tin*_*oni 27
这里列出的说明对我来说更有用.
从链接:
调整你的~/.ssh/config并添加:
Host example
Hostname example.com
User myuser
IdentityFile ~/.ssh/other_id_rsa
Run Code Online (Sandbox Code Playgroud)
现在使用ssh主机别名作为您的存储库:
$ git remote add origin example:repository.git
$ git pull origin master
Run Code Online (Sandbox Code Playgroud)
它应该使用other_id_rsa密钥!
dev*_*drc 19
在本地计算机上,编辑〜/ .ssh/config并添加:
Host example
Hostname example.com
User myuser
IdentityFile ~/.ssh/YOURPRIVATEKEY
Run Code Online (Sandbox Code Playgroud)
您应该能够使用"ssh example"登录您的实例.请记住,您的私钥应该是chmod 400.一旦您可以在不使用"ssh -i mykey.pem username @ host"的情况下进行ssh,请执行以下操作.
在您的EC2实例上,初始化一个裸存储库,用于独占推送.惯例是将扩展名".git"添加到文件夹名称.这可能与您的"project"文件夹中通常具有.git文件夹的本地仓库不同.裸存储库(根据定义)没有附加工作树,因此您无法像在普通的非裸存储库中那样轻松地向它们添加文件.这只是他们完成的方式.在你的ec2实例上:
mkdir project_folder.git
cd project_folder.git
git init --bare
Run Code Online (Sandbox Code Playgroud)
现在,返回本地计算机,在设置遥控器时使用ssh主机别名.
git remote add ec2 EXAMPLEHOSTFROMSSHCONFIG:/path/to/project_folder.git
Run Code Online (Sandbox Code Playgroud)
现在,你应该能够做到:
git push ec2 master
Run Code Online (Sandbox Code Playgroud)
现在您的代码被推送到服务器没有任何问题.但此时的问题是,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
Run Code Online (Sandbox Code Playgroud)
现在,在您的本地计算机上,执行"git push ec2 master",它应该将代码推送到您的裸仓库,然后post-receive hook脚本会将您的文件签出到您的Web服务器配置为读取的相应文件夹中.
您需要生成并将SSH密钥上传到EC2实例.请遵循以下教程:http://alestic.com/2010/10/ec2-ssh-keys
| 归档时间: |
|
| 查看次数: |
54243 次 |
| 最近记录: |