免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3008 | 回复: 0
打印 上一主题 下一主题

如何实现安全的免密码ssh登录 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-13 19:44 |只看该作者 |倒序浏览

                如何实现安全的免密码ssh登录            
            
Home
»
Blogs
»
Jianing Yang's blog
                                    
            
   
  
         
        Submitted by Jianing Yang on Fri, 2007-05-18 13:33      
              
        
SSH
免密码
运维
      
      
  
            背景
       
ssh实现了加密的远程登录. 但做为一个系统管理员,当需要操作的机器很多时频繁的输入密码往往会让你崩溃掉. 幸好你看到了这篇文章, 它将告诉你如何实现即安全又方便的免密码ssh登录.
        创建ssh公私钥
       
首先你需要放弃使用的密码登录的方式,因为那种方式实在太让人崩溃了. 下面我们开始使用一种被称为“公私钥“认证的方式来进行ssh登录. “公私钥“认证方式简单的解释是
       
  • 你需要创建一对公私钥
  • 然后把公钥放到服务器上, 自己保留好私钥
  • 当ssh登录时,ssh程序会发送私钥去和服务器上的公钥做匹配.如果匹配成功就可以登录了
           
    我们现在来点实际的, 我们有两台机器: qian.jianingy.com(这是我们的服务器, 实际上它是我的), nby.jianingy.com(这是我的笔记本). 首先,使用ssh-keygen程序在笔记本上创建公私钥对
            生成公私钥
    jianingy@nby:~$ ssh-keygen
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/jianingy/.ssh/id_rsa):
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in id_rsa.
    Your public key has been saved in id_rsa.pub.
    The key fingerprint is:
    15:c6:44:59:bf:6f:7a:11:eb:cb:02:d4:aa:33:e0:ae jianingy@nby
           
    ssh-keygen程序会寻问你把公私钥文件存放在哪里.根据传统我们会把它放在~/.ssh里面.如果你不想
    追随这个传统, 你可能给花些时间游说那些ssh程序.至于公私钥的名字, 用默认的id_rsa吧,道理是一样的.
    接下来输入一个口令,用来保护这个私钥. 我强烈建议你输入这个口令而不是让它为空(稍后我会解释的). 现在公私钥生成好了,
    私钥(identification)被保存成了id_rsa, 公钥(public key)被保存成id_rsa.pub. 注意:
    一定要保护好你的私钥,他就像你家里存家底的保险柜的钥匙一样重要.
    现在把doggy.pub拷贝到服务器上去, 并且将其内容追加到一个叫~/.ssh/authorized_keys的文件里去
    jianingy@nby:~$ cat /home/jianingy/.ssh/doggy.pub | ssh 192.168.1.9 "cat - >> ~/.ssh/authorized_keys"
           
    好现在试试看ssh登录吧. 如果你想了解更多可以试试看用ssh -v登录.
            使用密钥登录
    jianingy@nby:~$ ssh qian.jianingy.com
    Enter passphrase for key '/home/jianingy/.ssh/id_rsa':
           
    现在输入你的passphrase, 然后就能成功登录了.的确, 到现在我们还不能无密码登录,
    请再耐心点. 有个特例是, 如果你使用了空的passphrase,
    那么现在已经可以无密码登录了.但是我也必须提醒你这是很不安全的做法,一旦有人复制了你的passphrase, 它就真的成了机房“任我行“了.
            使用ssh-agent提供私钥
           

    下来是最关键的部分. 前面我们把输入密码变成了输入passphrase,
    这没有带来任何方便.但是,要知道有个家伙能帮助我们自动输入这个passphrase(只是看起来像是自动输入而已).
    我们只要输入一次passphrase, 以后的工作就可以交给那家伙了. 它就是ssh-agent(据我所知他和agent
    smith没有太多关系). 运行ssh-agent吧
    jianingy@nby:~$ eval `ssh-agent`
    jianingy@nby:~$ ssh-add
            运行ssh-add添加密钥
    jianingy@nby:~$ ssh-add
    Enter passphrase for /home/jianingy/.ssh/id_rsa:
    Identity added: /home/jianingy/.ssh/id_rsa (/home/jianingy/.ssh/id_rsa)
           
    好了,现在再次登录服务器, 我们已经没有密码的烦恼了.至于为什么要用这么奇怪的方式运行ssh-agent, 你可以试着在命令行上输入一个ssh-agent回车, 看看输出什么你就会明白了.
            复用已经存在的ssh-agent
           

    果你看了上面直接运行ssh-agent的输出,你应该已经明白了ssh和ssh-agent是如何相互了解的. 没错,
    通过环境变量ssh知道了与ssh-agent通信的unix
    socket在哪里.然而当我们打开一个新的终端时我们必须要重新设置这个环境变量.做为一个慵懒的系统管理员,这是不可忍受的.所以我用perl写了这
    个脚本, 他可以找到以前的ssh-agent.
    view source
    print
    ?
    01.#!/usr/bin/env perl02.# author: jianingy03.# 2007/06/2404. 05.use strict;06.my $exist;07.my @dirs = grep {-r $_} glob "/tmp/ssh-*";08.foreach (@dirs) {09.    my @socks = glob("{$_}/agent.*");10.    next unless (@socks);11.    foreach (@socks) {12.        $exist = $_;13.        # check agent14.        unless (system "SSH_AUTH_SOCK=$_ ssh-add -l >/dev/null 2>&1") {15.            print "export SSH_AUTH_SOCK=$_\n";16.            exit 0;17.        }18.    }19.}20. 21.if ($exist) {22.    system "SSH_AUTH_SOCK=$exist ssh-add";23.    print "export SSH_AUTH_SOCK=$exist\n";24.} else {25.    system "ssh-agent";26.    exec $0;27.}
           
    现在只需要在.bashrc里加入
    eval `ssh-attach`
           
    便可以在每次启动终端的时候就能复用ssh-agent了.到了这里我们已经实现了免密码的ssh登录(当然至少要输入一次passphrase, 但是相对于无数次的密码输入相信你不会在乎这一次的:P).
                   
                   
                   
                   
                   

    本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/99156/showart_2147867.html
  • 您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

    北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
    未成年举报专区
    中国互联网协会会员  联系我们:huangweiwei@itpub.net
    感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP