致力于Mac基础教育
RSS 图标 Email 图标 首页图标
  • 使用Keychain代理ssh私钥

    发表于 2009年06月22日 林胜 没有评论 阅读875次

    这篇文章是由quakelee为Mac疯撰写,感谢quakelee同学的分享。

    首先我们先了解一下ssh-agent的原理。当您所需要连接的一组服务器都使用同一个公钥认证时,登录到第一台服务器之后,想从该机向第二台服务器登录的时候,默认情况下是无法登录的。因为你的私钥存放在你的客户端,即使第二台服务器上存放了你的公钥信息,也无法通过第一台服务器验证你的私钥。这时候就需要使用ssh-agent来把你的私钥forward到第一台服务器上,以便第二台服务器能够进行key验证。ssh-agent的作用就是对客户端的私钥进行代理,而服务器上的sshd也有对应的Forward agent功能,这样你就可以在私钥只存放在客户端的情况下,无限制的在服务器间使用ssh进行跳转。

    但是标准的openssh(以及Putty)都需要单独启动ssh-agent程序来代理你的私钥,putty也需要单独启动Pageant来代理你的私钥。而启动ssh-agent并将私钥加入到agent中进行管理的操作还是有些复杂的,每次连接服务器之前都需要进行这项操作,操作起来还是相当不便。在以往同学们都是通过编写shell脚本来简化这个操作。经过一番研究后我发现Mac OS X实际已经提供了针对这个操作的辅助性功能。提供这项功能的软件就是我们经常不知道做什么用的Keychain。我个人理解Keychain这个软件就是Mac OS X上对各种软件密码进行统一代管的软件。当你将你某个软件的密码加入到Keychain中后,该软件请求密码时,Keychain将会帮你把密码输入。Keychain可代管的密码或密钥范围非常广泛,除ssh key以外,例如VPN软件密码等,都可以代为管理。下面我们主要针对ssh key的代理进行介绍。

    首先我们打开一个终端,输入env,可以看到类似如下的信息

    SSH_AUTH_SOCK=/tmp/launch-cr9PC8/Listeners

    fig-1.png

    这个变量中对应的Listeners就是由Keychain在系统引导时已经起好的ssh-agent。所以我们不需要再自行启动ssh-agent,只需要把自己的私钥加入到这个agent进行管理即可。可是这个操作如何操作呢?我们来man ssh-add,通过查看manpage,我们可以发现MacOSX上的ssh-add有一个特殊的选项-K,默认情况下直接执行命令

    ssh-add -K

    fig-2-1.png

    就能将你的私钥加入到Keychain中去,如果你的私钥的文件名没使用默认的.ssh/id_rsa的话,在-K后面输入你私钥的path就行了。私钥添加后可以执行

    ssh-add -l

    fig-3-1.png

    查看一下私钥是否添加正确。私钥添加完之后还需要做一个重要的配置变更。需要修改你自己Mac OS X上的/etc/ssh_config文件,将#ForwardAgent no 这行改成 ForwardAgent yes

    fig-4.png

    记得去掉前面的#。这行配置的作用就是告诉你的ssh客户端使用ForwardAgent功能。与此相对应的是每一台需要跳转ssh的服务器都需要修改这个文件。只有打开ForwardAgent这个选项的服务器才能向下一台服务器跳转。openssh默认这项都是关闭的。通常情况下FreeBSD和大部分的Linux系统的这个文件默认路径为/etc/ssh/ssh_config

    从此以后就可以尽情享受Keychain带来的便利了。


    相关文章
    1. Hotspot Shield简介及其广告去除方法
    2. 在Mac OS中隐藏和显示文件
    3. 把网页以PDF格式保存到指定文件夹
    4. 将Dashboard的小工具放到桌面
    5. 给地址簿中的联系人头像加上倒影(10.6)
    6. 解决雪豹下F8-F12键失效的方法
    7. 长文件名的显示
    8. 将多封Email保存到一个文本文件或PDF中

    发表评论