Github的SSH KEY配置

作者: 黑夜之旅 | 来源:发表于2014-10-28 03:12 被阅读13232次

    生成SSH Key

    • 生成SSH KEY: ssh-keygen -t rsa -C "your_email@example.com" , 然后会提示输入公钥的名字, 如果你需要多个SSH-KEY(比如有多个github帐号)就需要在命名的时候区分一下,比如输入"/home/chen/.ssh/xyz_rsa"这样的名字,这样在/home/chen/.ssh/文件夹下生成两个文件: xyz_rsa.pub和xyz_rsa, 分别是你的公钥和私钥.

    • 生成SSH KEY的时候还要求输入私钥密码"│Enter passphrase (empty for no passphrase):", 请记住私钥的密码, 下面导入私钥的时候要用到。

    • 将SSH 私钥增加到ssh-agent: ssh-add ~/.ssh/xyz_rsa, 这里会提示输入一次私钥的密码;

    • 查看已经add的SSH KEY: ssh-add -l

    • 安装xclip(终端到剪切板的工具): sudo yum install xclip , 将公钥内容拷贝到剪切板: xclip -sel clip < ~/.ssh/id_rsa.pub ;

    • 浏览器登录自己的github页面, 进入"Account Settings", 再点击左边的"SSH Key"可以看到自己上传过的SSH公钥列表. 再点击"Add SSH Key"新增一个公钥, 直接粘贴即可(上一步已经使用xclip把公钥id_rsa.pub复制到剪切板了);

    测试SSH Key登录

    • 打开终端, 测试: ssh -T git@github.com;
      你可能会看到下面的错误信息:

    Agent admitted failure to sign using the key.
    debug1: No more authentication methods to try.
    Permission denied (publickey).

    上面的错误在某些Linux发行版(比如我的Fedora 17)是一个已知的错误, 可以忽略。
    然后会看到打印出公钥的指纹,请确认此指纹和你公钥的一致,然后输入"yes"确认。

    " Hi your_name! You've successfully authenticated, but GitHub does not provide shell access."

    如果your_name正确显示你的ID,则说明成功设置了SSH公钥.

    一台机器上管理多个Github帐号的SSH Key

    如果你在一台机器使用两个github账号(比如私人账号abc和工作账号xyz),两个帐号用不同的SSH KEY,还需要编辑一下配置文件~/.ssh/config:

    Host personal.github.com  
        HostName github.com  
        User git  
        IdentityFile ~/.ssh/personal_rsa  
        
    Host work.github.com  
        HostName github.com  
        User git  
        IdentityFile ~/.ssh/work_rsa  
    

    解释此配置文件:

    • Host: "personal.github.com"是一个"别名",可以随意命名, 像github-PERSONAL这样的命名也可以;
    • HostName:比如我工作的git仓储地址是git@code.sohuno.com:username/repo_name.git, 那么我的HostName就要填"sohuno.com";
    • IdentityFile: 所使用的公钥文件;

    配置完毕,用下面的命令测试一下:

    ssh -T git@personal.github.com
    ssh -T git@work.github.com
    # 注: @符号后面的"personal.github.com"就是在~/.ssh/config文件中指定的"Host"项
    

    (1)为已经检出的repos指定github账号:

    在已经检出的repos目录下执行:

    git config  user.name "your-id"
    git config  user.email "your-id@gmail.com"
    

    修改.git/config并找到[remote "origin"],修改url的值为:

    [remote "origin"]   
        url = git@personal.github.com:user_name/repos_name.git  
    

    其中, personal.github.com就是在配置文件~/.ssh/config中的Host项, 设置完成后, 在这个工程目录git push会自动以此git帐号提交代码。

    (2)使用指定账号clone已存在的repos:

    1. 使用指定账号clone一个已经存在的repos:
      git clone git@personal.github.com:user_name/repos_name.git, 上面命令中的"personal.github.com"就是在~/.ssh/config文件中指定的"Host"项, "user_name"是指定提交代码的账户名, 例如:

    git clone git@personal.github.com:whatsdjgpp/Vimrc.git
    Cloning into 'Vimrc'...

    1. 然后还需要config一下user.name和user.email, 进入repos目录执行:
    git config user.name your_name
    git config user.email your_email
    

    以后在此repos下git push origin master就是使用指定的用户push.

    (3)使用指定账号init新的repos:

    如果是新建一个仓储:在github.com创建一个新repos,

    $ git init
    $ git add .
    $ git commit -m "first commit"
    $ git remote add origin git@personal.github.com:user_name/testing.git
    $ git push -u origin master
    

    上面命令第4行: "personal.github.com"就是在~/.ssh/config文件中指定的"Host"项, "user_name"是指定提交代码的账户名.

    参考:

    《Quick Tip: How to Work with GitHub and Multiple Accounts》
    《Multiple SSH Keys settings for different github account》
    《多个github帐号的SSH key切换》
    《GitHub: Generating SSH Keys》

    相关文章

      网友评论

      • McDu:很详细,~\(≧▽≦)/~

      本文标题:Github的SSH KEY配置

      本文链接:https://www.haomeiwen.com/subject/tcjvtttx.html