技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 网络系统 --> SSH免密码认证进阶使用

SSH免密码认证进阶使用

浏览:2808次  出处信息

大家都知道,SSH可以通过证书进行免密码认证(see)。不过长期以来,我对SSH证书认证都不太感冒,主要是安全方面的考虑:

当要管理多台服务器时,假定PC机是Local,分别有服务器:s1和s2。私钥放在Local,公钥分别放在两台服务器,那Local登录到两台服务器都可以不再需要密码认证。

但是从两台服务器之间呢?

由于两台服务器上都只有公钥,没有私钥,当从s1->s2,或者相反的时候,依然要输入密码认证。

除非你在s1和s2上都放私钥就可以解决这个问题,如果服务器数量再多的话,私钥管理起来就成问题,容易被窃取。

风险很大的说!有木有?有木有??(回答木有的那位:同学,你好,请点我

直到我最近研究到pageant。才知道:哇靠,原来把私钥放在Local,s1和s2之间的认证也是可以证书实现的。真正做到一个私钥通行所有服务器,私钥不外漏,安全有保障。

要这么做其实很简单,要启用SSH认证代理。Linux下运行ssh-agent,Windows下以putty为例:

  1. 先要下载pageant,运行并加载私钥;
  2. 再设置putty允许代理转发(Allow agent forwarding);

只需要这样,就解决了 s1->s2或s2->s1之间的认证问题,不再需要把私钥放上服务器。

但是,解决的还不够彻底,在这种情况下(所有服务器上都有公钥,从Local连入S1,再从S1使用SSH命令连扩S2,再从S2使用SSH命令连入S3):

这时候,即使S3服务器上有公钥,依然要输入密码进行验证。解法有二:

  1. 在S1连接S2的时候,SSH命令附加参数:-A
  2. 在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的兼容问题

建议继续学习:

  1. Linux shell脚本使用while循环执行ssh的注意事项    (阅读:6648)
  2. 在ssh服务里使用chroot    (阅读:4866)
  3. 为什么要用公钥/私钥而不是密码去做SSH身份验证    (阅读:4700)
  4. 懒人连ssh不输密码若干大法    (阅读:4499)
  5. ssh连接超时解决办法    (阅读:4488)
  6. 如何让ssh登录更加安全    (阅读:4498)
  7. ssh命令    (阅读:4230)
  8. SSH无密码登录    (阅读:4265)
  9. 共享会话的ssh连接配置    (阅读:3592)
  10. SSH下连接Oracle的方法    (阅读:3502)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1