SSH免密码认证进阶使用
大家都知道,SSH可以通过证书进行免密码认证(see)。不过长期以来,我对SSH证书认证都不太感冒,主要是安全方面的考虑:
当要管理多台服务器时,假定PC机是Local,分别有服务器:s1和s2。私钥放在Local,公钥分别放在两台服务器,那Local登录到两台服务器都可以不再需要密码认证。
但是从两台服务器之间呢?
由于两台服务器上都只有公钥,没有私钥,当从s1->s2,或者相反的时候,依然要输入密码认证。
除非你在s1和s2上都放私钥就可以解决这个问题,如果服务器数量再多的话,私钥管理起来就成问题,容易被窃取。
风险很大的说!有木有?有木有??(回答木有的那位:同学,你好,请点我)
直到我最近研究到pageant。才知道:哇靠,原来只把私钥放在Local,s1和s2之间的认证也是可以证书实现的。真正做到一个私钥通行所有服务器,私钥不侧外漏,安全有保障。
要这么做其实很简单,要启用SSH认证代理。Linux下运行ssh-agent,Windows下以putty为例:
- 先要下载pageant,运行并加载私钥;
- 再设置putty允许代理转发(Allow agent forwarding);
只需要这样,就解决了 s1->s2或s2->s1之间的认证问题,不再需要把私钥放上服务器。
但是,解决的还不够彻底,在这种情况下(所有服务器上都有公钥,从Local连入S1,再从S1使用SSH命令连扩S2,再从S2使用SSH命令连入S3):
这时候,即使S3服务器上有公钥,依然要输入密码进行验证。解法有二:
- 在S1连接S2的时候,SSH命令附加参数:-A
- 在S1服务器的.ssh目录增加SSH客户端配置文件(~/.ssh/config),配置“ForwardAgent yes ”,完整的配置:
Host * ForwardAgent yes
我采取的是第2种方法,将SSH配置文件(.ssh/config)和公钥(.ssh/authorized_keys),分发到所有的服务器上,形成完整的网络。只需要打开pageant,无论从哪台服务器登陆到另外一台都不需要输入密码了,连github的私钥也可以放在Local哦。我不得不说一句:真他妈的帅~啊!
另外,如果想要pageant运行时自动加载私钥,可以建一个指向pageant.exe的快捷方式,修改这个快捷方式的目标,将私钥路径附加在后面(via)。
-
Update:
2011.07.09 - SSH agent与GNU screen之间不太兼容,可参见《SSH Agent与GNU Screen的兼容问题》
建议继续学习:
- Linux shell脚本使用while循环执行ssh的注意事项 (阅读:6638)
- 在ssh服务里使用chroot (阅读:4858)
- 为什么要用公钥/私钥而不是密码去做SSH身份验证 (阅读:4695)
- 懒人连ssh不输密码若干大法 (阅读:4494)
- ssh连接超时解决办法 (阅读:4481)
- 如何让ssh登录更加安全 (阅读:4492)
- ssh命令 (阅读:4224)
- SSH无密码登录 (阅读:4256)
- 共享会话的ssh连接配置 (阅读:3584)
- SSH下连接Oracle的方法 (阅读:3486)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:肖斌 来源: 将之典藏
- 标签: SSH
- 发布时间:2011-09-19 23:29:02
- [54] Oracle MTS模式下 进程地址与会话信
- [54] Go Reflect 性能
- [54] IOS安全–浅谈关于IOS加固的几种方法
- [53] 如何拿下简短的域名
- [52] android 开发入门
- [49] 图书馆的世界纪录
- [48] 读书笔记-壹百度:百度十年千倍的29条法则
- [47] 【社会化设计】自我(self)部分――欢迎区
- [38] 程序员技术练级攻略
- [31] 视觉调整-设计师 vs. 逻辑