我已经设置了2个Google Compute Engine实例,我可以使用 gcloud compute ssh 命令创建的密钥轻松地在两个实例中进行SSH。但是当我尝试以下内容时......
myself@try-master ~] ssh-keygen -q -t rsa -N "" -f ~/.ssh/id_rsa
myself@try-master ~] cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
myself@try-master ~] chmod 0600 ~/.ssh/authorized_keys
myself@try-master ~] ssh-copy-id -i ~/.ssh/id_rsa.pub myself@try-slave-1
...它不起作用,ssh-copy-id显示以下消息:
Permission denied (publickey,gssapi-keyex,gssapi-with-mic)
如果我在try-master上复制google_compute_engine私钥和公钥,并且可以使用它来登录这两个实例,但我发现通过网络移动私钥并不令人满意。我想这与这个topic有点相关:
如何解决这个问题?
[1] https://cloud.google.com/compute/docs/instances#sshbetweeninstances
答案 0 :(得分:2)
使用CentOS7图像和CentOs7作为本地主机:
gcloud compute instances create try-master --image centos-7
gcloud compute instances create try-slave-1 --image centos-7
这可以通过在初始SSH密钥设置期间使用身份验证转发来解决:
在本地计算机上设置一次身份验证转发(请注意" -A"标志)。首先你需要运行:
eval `ssh-agent -s`
然后
ssh-add ~/.ssh/google_compute_engine
gcloud compute ssh --ssh-flag="-A" try-master
执行上述步骤(从keygen到ssh-copy-id)
myself@try-master ~] ssh-keygen -q -t rsa -N "" -f ~/.ssh/id_rsa
myself@try-master ~] cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
myself@try-master ~] chmod 0600 ~/.ssh/authorized_keys
myself@try-master ~] ssh-copy-id -i ~/.ssh/id_rsa.pub myself@try-slave-1
myself@try-master ~] exit
gcloud compute ssh try-master
myself@try-master ~] ssh myself@try-slave-1
myself@try-slave-1 ~]
初始方法不起作用,因为GCE实例默认只允许公钥验证。因此,ssh-copy-id无法通过try-slave进行身份验证来复制新的公钥,因为在try-slave中没有配置try-master中的公钥。
使用身份验证转发,本地计算机上的私钥将从本地计算机转发到try-master,并从那里转发到try-slave。 try-slave中的GCE帐户管理器将从项目元数据中获取公钥,因此ssh-copy-id将能够复制工作。