代码改变世界

github中的登录认证 转自http://www.wojilu.com/Forum1/Topic/2235

2012-03-10 20:15  Rollen Holt  阅读(5119)  评论(0编辑  收藏  举报

github 使用 ssh 方式认证登录。

 

官方文档:http://help.github.com/ssh-key-passphrases/

 

之所以不使用普通的密码验证登录,原因在于:密码不够安全。如果你使用简单的密码,比如“1234”,非常容易被猜到或者被暴力破解;如果你使用复杂的密码,为了避免自己也忘记,又可能会记在某个地方,如果被人发现,就糟了。两种方式都很不妥。所以 github 采用 ssh 密钥方案。

 

但如果只使用 ssh 密钥而不使用 passphrase(口令或密码),那跟使用复杂密码然后记下来没啥区别。比如你将ssh密钥记在电脑某处,如果其他人获取了这个文件,那就没有安全可言。解决办法是:再增加一个 passphrase

 

所以,整个认证过程是:

a)先生成一个 ssh key,在github和本地机器配置;

b)然后在登录的时候,再输入 passphrase 登录(当然,我们可以通过脚本配置,避免每次重复输入 passphrase )。 

 

第一部分:配置ssh

 

先进入 cygwin 命令行。为了在你的电脑和github之间建立安全连接,需要SSH keys,所以你需要

 

1)先检测是否有这个key,请点击开始菜单中的 Git Bash,输入如下命令

cd ~/.ssh

 

2)系统应该反馈“系统找不到指定文件”,那么,我们需要生成一个新的key,输入如下代码

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

——其中的email请填写你注册时候的email

 

系统开始生成ssh公钥和私钥,然后会问你保存的目录,请直接回车即可(直接回车意味着在当前目录下的.ssh目录保存)

 

3)输入一个密码(passphrase),请至少填写一个4位数,这个密码是你连接到github所用。输入之后,会生成id_rsa(私钥 id_rsa.pub(公钥文件,如下图所示:

 

 

 

访问github网站, “Account Settings” > Click “SSH Public Keys” > Click “Add another public key”

 

用文本编辑器打开上图中第二个文件 id_rsa.pub,里面的内容就是SSH key,请复制它,粘贴入key里面,记得不要有任何多余的空格和换行。然后点击“Add key”提交。(Title栏可以不填写)

 

 

现在,你可以测试通过SSH连接到github了。请打开Git Bash,输入如下代码——

ssh -T git@github.com

 

如果提示“can't be established.”什么东西(如下代码),请不要管,直接按yes

The authenticity of host 'github.com (207.97.227.239)' can't be established.

RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.

Are you sure you want to continue connecting (yes/no)?

 

然后提示输入密码(passphrase)。

 

如果看到 You've successfully authenticated, but GitHub does not provide shell access 信息,就表示连接成功。

 

 

第二部分:避免重复输入 passphrase

 

 

通过上面的流程,已经正确配置了 ssh ,但你每次使用的时候,总是很不爽,比如在命令行下,每次 pull  push,都要重复输入 passphrase。你会想:我明明已经使用 ssh key 了,为什么还要我输入密码?

 

分两种情况讨论——

 

一、命令行下避免重复输入

 

在这种情况下,有一个工具可以帮你避免重复输入 passphrase ,这个工具叫 ssh-agent ,它可以帮你安全的存储passphrase,不用重复输入。

 

具体使用方法是通过脚本预设——

 

1)打开用户主目录下(比如c/cygwin/home/Administrator) .bashrc 文件,将如下脚本内容添加进去:

 

SSH_ENV="$HOME/.ssh/environment"

# start the ssh-agent
function start_agent {
    
echo "Initializing new SSH agent..."
    
# spawn ssh-agent
    ssh-agent | sed 
's/^echo/#echo/' > "$SSH_ENV"
    
echo succeeded
    chmod 600 
"$SSH_ENV"
    . 
"$SSH_ENV" > /dev/null
    ssh-add
}

# test for identities
function test_identities {
    
# test whether standard identities have been added to the agent already
    ssh-add -l | grep 
"The agent has no identities" > /dev/null
    
if [ $? -eq 0 ]then
        ssh-add
        
# $SSH_AUTH_SOCK broken so we start a new proper agent
        
if [ $? -eq 2 ];then
            start_agent
        
fi
    fi
}

# check for running ssh-agent with proper $SSH_AGENT_PID
if [ -n "$SSH_AGENT_PID" ]then
    ps -ef | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null
    
if [ $? -eq 0 ]then
        test_identities
    
fi
# if $SSH_AGENT_PID is not properly set, we might be able to load one from
# $SSH_ENV
else
    if [ -f "$SSH_ENV" ]then
        . 
"$SSH_ENV" > /dev/null
    
fi
    ps -ef | grep "$SSH_AGENT_PID" | grep -v grep | grep ssh-agent > /dev/null
    
if [ $? -eq 0 ]then
        test_identities
    
else
        start_agent
    
fi
fi

 

 

2)然后打开 cygwin 的命令行,第一次打开,它会要求你输入 passphrase ,输入之后,再执行相应的远程操作,就不会要求重复输入 passphrase 了(当然重启电脑会要求再次输入)。

 

 

二、git extentions 中避免重复输入

 

【启用 PuTTY

 

1)打开 PuTTY,方法:“远程”->PuTTY->“生成或者导入key

 

2)导入你前面的 ssh key,点击下面的“Load”按钮,导入前面生成的 id_rsa 文件

 

 

3)这时它要求你输入 passphrase

 

 

4)输入成功,然后你需要点击下图的 Save private key,将私钥保存,你可以将它保存在 id_rsa(ssh私钥同一个目录。PuTTY 生成的私钥文件是 .ppk 后缀名。

 

 

【在 git extensions 中使用 PuTTY

 

1)打开 git etensions,在 “远程”菜单中,点击“管理远程档案库”

 

2)点击右下部分的“私钥文件”后面的“浏览”,将前面 PuTTY 中保存的 .ppk 后缀的私钥文件加载进来。

 

然后点击“加载SSH密钥”,输入 passphrase,然后点击“测试连接”

此时 PuTTY/plink.exe 开始启动,只要这个开着,就不用重复输入 passphrase

 

 

3)现在可以顺利和远程库操作,比如下面的“拉取”

 

或者在 vs 中直接操作——