IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

SSH免密码认证进阶使用

将之典藏 2011-09-19 23:29:02 累计浏览 3,654 次
本机暂存

大家都知道,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. 绿盟科技《APT组织研究年鉴》(2026 版)正式发布 (2026-06-16 20:21:10)
  2. 【已复现】Linux内核Fragnesia权限提升漏洞(CVE-2026-46300) (2026-06-15 10:53:58)
  3. 企业文档安全最佳实践(二):给文档上“身份证”——手动标密与智能自动标密 (2026-06-12 17:18:33)

查看更多 安全 文章 →

建议继续学习

  1. 高效Linux用户需要了解的命令行技能 (累计阅读 12,826)
  2. linux 建立两台机器的信任关系 (累计阅读 11,485)
  3. 腾讯php程序员面试题目答案 (累计阅读 8,974)
  4. sshd+chrome+switchsharp翻墙 (累计阅读 8,788)
  5. Linux shell脚本使用while循环执行ssh的注意事项 (累计阅读 8,191)
  6. Mac下使用SecureCRT的一些记录 (累计阅读 7,872)
  7. SecureCRT for Mac OS X 6.7.3破解方法 (累计阅读 6,812)
  8. 如何设计用户登录 (累计阅读 6,644)
  9. 13 Linux的致命命令 (累计阅读 6,177)
  10. RSA 公钥格式转换之PHP实现 (累计阅读 6,017)