我正在尝试用Ansible理解
GitHub ssh配置(我正在研究Ansible:Up& Running book).我遇到了两个问题.
权限被拒绝(公钥) –
当我第一次运行ansible-playbook mezzanine.yml playbook时,我得到了一个拒绝的许可:
failed: [web] => {"cmd": "/usr/bin/git ls-remote '' -h refs/heads/HEAD", "failed": true, "rc": 128}
stderr: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
msg: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
FATAL: all hosts have already failed -- aborting
好吧,公平地说,我看到有几个人遇到过这个问题.所以我跳到附录A用SSH运行Git,它说要运行ssh-agent并添加id_rsa公钥:
eval `ssh-agent -s`
ssh-add ~/.ssh/id_rsa
输出:Identity AddedI运行ssh-agent -l来检查并获得长字符串:2048 e3:fb:…但是我得到了相同的输出.所以我检查了关于ssh密钥生成和故障排除的Github文档,建议在我的主机上更新ssh配置文件:
Host github.com
User git
Port 22
Hostname github.com
IdentityFile ~/.ssh/id_rsa
TCPKeepAlive yes
IdentitiesOnly yes
但这仍然提供相同的错误.所以在这一点上,我开始认为这是我的rsa文件,这导致了我的第二个问题.
密钥生成问题 – 我试图生成一个额外的证书,因为Github测试引发了另一个“Permission denied(publickey)”错误.
Warning: Permanently added the RSA host key for IP address '192.30.252.131' to the list of known hosts.
Permission denied (publickey).
我从头开始遵循Github指令并生成一个具有不同名称的新密钥.
ssh-keygen -t rsa -b 4096 -C "me@example.com"
我没有输入密码并将其保存到名为git_rsa.pub的.ssh文件夹中.我运行了同样的测试,得到了以下内容:
$ssh -i ~/.ssh/git_rsa.pub -T git@github.com
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/Users/antonioalaniz1/.ssh/git_rsa.pub' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: ~/.ssh/github_rsa.pub
Permission denied (publickey).
我检查了权限,并在文件上做了一个chmod 700,我仍然得到Permission denied(publickey).我甚至试图将密钥输入我的Github帐户,但首先得到一条消息,密钥文件需要以ssh-rsa开头.所以我开始研究和黑客攻击.刚开始只输入文件中的长字符串(它以–BEGIN PRIVATE KEY–开头,但是在失败后我省略了那个部分);然而,Github不接受它,说这是无效的.
这是我在YAML文件中的Ansible命令:
- name: check out the repository on the host
git: repo={{ repo_url }} dest={{ proj_path }} accept_hostkey=yes
vars:
repo_url: git@github.com:lorin/mezzanine-example.git
这是我配置了ForwardAgent的ansible.cfg文件:
[defaults]
hostfile = hosts
remote_user = vagrant
private_key_file = .vagrant/machines/default/virtualbox/private_key
host_key_checking = False
[ssh_connection]
ssh_args = -o ControlMaster=auto -o ControlPersist=60s -o ForwardAgent=yes
该框是使用Mac OS的Ubuntu Trusty64.如果有人能够让我知道文件权限和/或Github密钥生成,我将不胜感激.
最佳答案 我怀疑关键权限问题是因为你传递公钥而不是私钥作为“ssh -i”的句子.试试这个:
ssh -i ~/.ssh/git_rsa -T git@github.com
(注意它是git_rsa而不是git_rsa.pub).
如果可行,请确保它在您的ssh-agent中.加上:
ssh-add ~/.ssh/git_rsa
核实:
ssh-add -l
然后通过执行以下操作检查Ansible是否尊重代理转发:
ansible web -a "ssh-add -l"
最后,通过执行以下操作检查您是否可以通过ssh访问GitHub:
ansible web -a "ssh -T git@github.com"
你应该看到类似的东西:
web | FAILED | rc=1 >>
Hi lorin! You've successfully authenticated, but GitHub does not provide shell access.