zoukankan      html  css  js  c++  java
  • windows git:添加SSH key

    git如果使用https协议,每次push时都会提示输入用户名和密码,使用ssh秘钥(git协议)则可以避免这一麻烦。

    配置方法:
    1、进入目录~/.ssh

    $ cd ~/.ssh
    

    在windows下,这个目录一般为C:Usersyour_username.ssh

    2、创建ssh key

    $ ssh-keygen -t rsa -C "your_email@example.com"
    

    代码参数含义:

    -t 指定密钥类型,默认是rsa,可以省略。
    -C 设置注释文字,比如邮箱。
    -f 指定密钥文件存储文件名。

    以上代码省略了 -f 参数,因此,运行上面那条命令后会让你输入一个文件名,用于保存刚才生成的ssh key代码,如:

    Generating public/private rsa key pair.
    # Enter file in which to save the key (/c/Users/you/.ssh/id_rsa): [Press enter]
    

    若不输入直接按enter,则使用默认文件名(强烈建议这么做!!!!),并在~/.ssh目录下生成id_rsa和id_rsa.pub两个文件

    然后会提示输入密码

    Enter passphrase (empty for no passphrase): 
    # Enter same passphrase again:
    

    这个密码是每次push时需要输入的密码。同样地,也可以不输入密码,直接按回车跳过这个步骤,这样以后push的时候才能不用输密码

    之后就会显示如下

    Your identification has been saved in /c/Users/saltyfish/.ssh/id_rsa.
    Your public key has been saved in /c/Users/saltyfish/.ssh/id_rsa.pub.
    The key fingerprint is:
    SHA256:BRxQ5G4VITTmcxEO9da8AL8MIg9Aw/2bRgQiR3D4Xto qxy65535@gmail.com
    The key's randomart image is:
    +---[RSA 2048]----+
    |    .o. oO&+*=   |
    |     .o..O+* + o |
    |       .o.B.+..oo|
    |        .=.= oo o|
    |        So*.+. o.|
    |         =+o.Eo .|
    |        .  .   o |
    |                 |
    |                 |
    +----[SHA256]-----+
    

    3、添加ssh key到github
    到key生成目录~/.ssh下找到id_rsa.pub文件并用编辑器打开,复制里面的内容;
    在github->setting->SSH and GPG keys的SSH keys选择New SSH key,将从id_rsa.pub中复制到的内容粘贴进去并点击Add SSH key
    add ssh key
    这样就OK了

    4、测试ssh key
    在git bash中输入

    $ ssh -T git@github.com
    

    得到以下回应就算成功

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

    5、使用ssh进行push
    在git bash输入remote -v查看当前的remote url

    $ git remote -v
    

    若得到的连接是以https开头的,例如

    origin  https://github.com/qxy65535/tfjs_test.git (fetch)
    origin  https://github.com/qxy65535/tfjs_test.git (push)
    

    说明此时是以https协议访问该仓库,若配完ssh key不想每次输密码,需要将它替换成git协议:

    $ git remote set-url origin git@github.com:qxy65535/tfjs_test.git
    

    以后再用git push就不需要密码了

    遇到的问题

    1、使用ssh -T出现Permission denied (publickey).
    原因:SSH密钥对不匹配。这个错误主要密匙全路径名不相符,结果导致本地的SSH工具无法找到到正确的密匙。
    解决:首先检查步骤2中生成的两个文件是否确实在~/.ssh路径下,如过不是,把它们移过去。
    其次是非常重要的一点,如果你在步骤2中自定义了ssh key的文件名,那么原因就在于你的命名与ssh内设定的名字不一致,因此需要手动添加秘钥。很多教程大概不是windows系统。。直接让输入命令

    $ ssh-add ~/.ssh/你的文件名
    

    于是就有了问题2

    2、执行ssh-add时出现Could not open a connection to your authentication agent
    其实应该将自定义名字的秘钥交给ssh-agent管理:GitHub help:Generating a new SSH key and adding it to the ssh-agent

    # start the ssh-agent in the background
    $ eval $(ssh-agent -s)
    Agent pid 59566
    $ ssh-add ~/.ssh/id_rsa
    

    但是这样很麻烦,难道每次重启git bash都要打这么一套前奏吗??
    当然不会,所以可以把这段代码加入到git bash的启动脚本中去。
    使用编辑器打开Git安装目录下的etc/bash.bashrc文件,在末尾添加两行

    eval "$(ssh-agent -s)"
    ssh-add ~/.ssh/你的文件名
    

    保存退出即可。

    用ssh-add除了能更改ssh秘钥的文件名,也完全可以用来更改秘钥的路径,比如ssh-add your_path/your_key

    遇到的问题都是起源于给ssh key文件自定义了一个文件名。。所以没什么特殊要求的话,还是一路enter使用默认吧_(:3」∠)_

  • 相关阅读:
    UC_online在线抽奖_新浪UC(Tab页功能)
    Asp.Net上传文件示例(保存文件路径到数据库)
    中国十大美丽女主播
    行业应用软件项目经理三步曲
    TVB十大女星比美十大名花
    SQLServer和Oracle常用函数对比
    如何撰写商业计划
    带农历的日历
    ASP+VML制作统计图的源程序
    Winamp网页播放器
  • 原文地址:https://www.cnblogs.com/sssaltyfish/p/10656763.html
Copyright © 2011-2022 走看看