git ssh Permission denied

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/alexander_phper/article/details/52871191

生成SSH KEY

按照步骤生成ssh key

$ ssh-keygen -t rsa -C "your@email.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/savepath/.ssh/id_rsa): /savepath/.ssh/test
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /savepath/.ssh/test.
Your public key has been saved in /savepath/.ssh/test.pub.
The key fingerprint is:
SHA256:s+pP6bI+hOAxGISlhDoobOQAXcyhqSzFCdBFMNCN4+s your@email.com
The key's randomart image is:
+---[RSA 2048]----+
|@O+X=.           |
|*=*=+            |
|O+*.             |
|B*=              |
|=+ = .  S        |
|. o . .  +       |
| .   .  +        |
|  E   o+         |
|     o==o        |
+----[SHA256]-----+

上面的保存地址写绝对物理路径。savepath = ~。
生成两个文件:
1. 私钥:/savepath/.ssh/test
2. 公钥:/savepath/.ssh/test.pub
密码可以为空。

SSH连接

然后将公钥加入github,测试ssh连接。

$ ssh -T git@github.com
Permission denied (publickey).

遇到Permission denied。
查看详细连接步骤:

debug1: Trying private key: /savepath/.ssh/id_rsa
debug1: Trying private key: /savepath/id_dsa
debug1: Trying private key: /savepath/id_ecdsa
debug1: Trying private key: /savepath/id_ed25519
debug1: No more authentication methods to try.
Permission denied (publickey).

由于我生成的key名称没有写成默认的id_rsa,所以系统找不到我的私钥。生成的test并没有被使用。

网上给出的解决方案:

$ eval `ssh-agent -s`
Agent pid 4836

$ ssh-add ~/.ssh/testapps
Identity added: /savepath/.ssh/testapps (/savepath/.ssh/testapps)

测试ssh连接:

Hi gt199899/testapps! You've successfully authenticated, but GitHub does not pro                                                   vide shell access.
debug1: channel 0: free: client-session, nchannels 1
Transferred: sent 3080, received 1784 bytes, in 0.7 seconds
Bytes per second: sent 4702.0, received 2723.5
debug1: Exit status 1

ssh连接成功,但是如果重新打开一个git bash,或者将这个git bash关闭掉,再测试ssh连接,发现仍然是Permission denied。

上面打开ssh-agent的时候,返回一个4836的pid号,我们查看windows的pid,可以看到如下:
这里写图片描述
这里这个进程当作用的git bash窗口关闭掉的时候就会关闭,并且仅作用于启动这个进程的git bash窗口。

配置ssh config

我们不可能每次连接ssh的时候,都去执行下ssh-agent命令,持久化得配置就是ssh config。
在~/.ssh/里面新增config文件。
文件内容如下:

# Github
Host github.com
User git
Hostname github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/test

部署设置规则
Host:本地名称,自定义
Hostname:服务器地址
IdentityFile:私钥路径

然后重新打开一个git bash,测试SSH连接

$ ssh -T git@github.com
Hi gt199899/testapps! You've successfully authenticated, but GitHub does not provide shell access.

SSH连接成功,并且是持久化配置。

备注

ssh-agent 命令:http://man.linuxde.net/ssh-agent
ssh-add 命令:http://man.linuxde.net/ssh-add

ssh-agent命令是一个ssh中保存私钥的一个程序,启动之后,可以使用ssh-add给程序添加私钥,如果私钥有密码,也会将密码同时保存到程序中。但是这个程序在windows中是一个和git bash窗口绑定的,仅能作用于这个窗口,当窗口关闭的时候,程序就关闭了,下次就要重新启动ssh-agent。

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试