zoukankan      html  css  js  c++  java
  • 公钥私钥免密码登陆(转)

     排查

    ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.10.1.247

    权限 600

    1.免登陆的实现:

     

    使用下例中ssky-keygen和ssh-copy-id,仅需通过3个步骤的简单设置而无需输入密码就能登录远程Linux主机。  
    ssh-keygen 创建公钥和密钥。  
    ssh-copy-id 把本地主机的公钥复制到远程主机的authorized_keys文件上。
    ssh-copy-id 也会给远程主机的用户主目录(home)和~/.ssh, 和~/.ssh/authorized_keys设置合适的权限 。

    步骤1: 用 ssh-key-gen 在本地主机上创建公钥和密钥

    ligh@local-host$ ssh-keygen -t rsa
    Enter file in which to save the key (/home/jsmith/.ssh/id_rsa):[Enter key]  
    Enter passphrase (empty for no passphrase): [Press enter key]
    Enter same passphrase again: [Pess enter key]
    Your identification has been saved in /home/jsmith/.ssh/id_rsa.
    Your public key has been saved in /home/jsmith/.ssh/id_rsa.pub.  
    The key fingerprint is: 33:b3:fe:af:95:95:18:11:31:d5:de:96:2f:f2:35:f9  
    ligh@local-host



    步骤2: 用 ssh-copy-id 把公钥复制到远程主机上

    ligh@local-host$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.3
    ligh@remote-host‘s password:
    Now try logging into the machine, with ―ssh ?remote-host‘‖, and check in:  
    .ssh/authorized_keys to make sure we haven‘t added extra keys that you weren‘t expecting.


    [注: ssh-copy-id 把密钥追加到远程主机的 .ssh/authorized_key 上.]

    步骤3: 直接登录远程主机

    ligh@local-host$ ssh remote-host  
    Last login: Sun Nov 16 17:22:33 2008 from 192.168.1.2  


    [注: SSH 不会询问密码.]  
    ligh@remote-host$  
    [注: 你现在已经登录到了远程主机上]

    2.登陆失效、公钥失效的情况

    之前没有用ssh-copy-id复制公钥到远程机器上,而是用scp拷贝之后再手动加入到authorized_keys。

    但是某一天这种做法忽然失效了。。。暂时也没找到原因。但是后来后来重新生成密钥,然后使用ssh-copy-id解决了问题。

    注意重新生成密钥之后之前设置的免登陆slave端都要重新拷贝公钥。

    总结:

    1、远程需要登录的机器是公钥

    2、本机上放的是私钥,去开启各种公钥。

    ------------------------------

        一直以来对公钥和私钥都理解得不是很透彻,感觉到模棱两可,心里直打鼓呢。公钥怎么会事?私钥怎么会事?工作原理是怎么的?今天在网上找了半天,通过查看大家对这个密钥对的理解,总算弄清楚了,咱就把我的心得写出来给大家对密钥对有疑问的同志们看看。
          公钥和私钥就是俗称的不对称加密方式,是从以前的对称加密(使用用户名与密码)方式的提高。我用电子邮件的方式说明一下原理。
          使用公钥与私钥的目的就是实现安全的电子邮件,必须实现如下目的:
          1. 我发送给你的内容必须加密,在邮件的传输过程中不能被别人看到。
          2. 必须保证是我发送的邮件,不是别人冒充我的。
          要达到这样的目标必须发送邮件的两人都有公钥和私钥。
          公钥,就是给大家用的,你可以通过电子邮件发布,可以通过网站让别人下载,公钥其实是用来加密/验章用的。私钥,就是自己的,必须非常小心保存,最好加上密码,私钥是用来解密/签章,首先就Key的所有权来说,私钥只有个人拥有。公钥与私钥的作用是:用公钥加密的内容只能用私钥解密,用私钥加密的内容只能用公钥解密。
          比如说,我要给你发送一个加密的邮件。首先,我必须拥有你的公钥,你也必须拥有我的公钥。
          首先,我用你的公钥给这个邮件加密,这样就保证这个邮件不被别人看到,而且保证这个邮件在传送过程中没有被修改。你收到邮件后,用你的私钥就可以解密,就能看到内容。
          其次我用我的私钥给这个邮件加密,发送到你手里后,你可以用我的公钥解密。因为私钥只有我手里有,这样就保证了这个邮件是我发送的。
          当A->B资料时,A会使用B的公钥加密,这样才能确保只有B能解开,否则普罗大众都能解开加密的讯息,就是去了资料的保密性。验证方面则是使用签验章的机制,A传资料给大家时,会以自己的私钥做签章,如此所有收到讯息的人都可以用A的公钥进行验章,便可确认讯息是由 A 发出来的了。

    ----------------------------------------------------------------------

    通常,通过ssh登录远程服务器时,使用密码认证,分别输入用户名和密码,两者满足一定规则就可以登录。但是密码认证有以下的缺点:

    • 用户无法设置空密码(即使系统允许空密码,也会十分危险)
    • 密码容易被人偷窥或猜到
    • 服务器上的一个帐户若要给多人使用,则必须让所有使用者都知道密码,导致密码容易泄露,而且修改密码时必须通知所有人

    而使用公钥认证则可以解决上述问题。

    • 公钥认证允许使用空密码,省去每次登录都需要输入密码的麻烦
    • 多个使用者可以通过各自的密钥登录到系统上的同一个用户

    公钥认证的原理

    所谓的公钥认证,实际上是使用一对加密字符串,一个称为公钥(public key),任何人都可以看到其内容,用于加密;另一个称为密钥(private key),只有拥有者才能看到,用于解密。通过公钥加密过的密文使用密钥可以轻松解密,但根据公钥来猜测密钥却十分困难。

    ssh 的公钥认证就是使用了这一特性。服务器和客户端都各自拥有自己的公钥和密钥。为了说明方便,以下将使用这些符号。

    Ac 客户端公钥
    Bc 客户端密钥
    As 服务器公钥
    Bs 服务器密钥

    在认证之前,客户端需要通过某种方法将公钥 Ac 登录到服务器上。

    认证过程分为两个步骤。

    1. 会话密钥(session key)生成
      1. 客户端请求连接服务器,服务器将 As 发送给客户端。
      2. 服务器生成会话ID(session id),设为 p,发送给客户端。
      3. 客户端生成会话密钥(session key),设为 q,并计算 r = p xor q。
      4. 客户端将 r 用 As 进行加密,结果发送给服务器。
      5. 服务器用 Bs 进行解密,获得 r。
      6. 服务器进行 r xor p 的运算,获得 q。
      7. 至此服务器和客户端都知道了会话密钥q,以后的传输都将被 q 加密。
    2. 认证
      1. 服务器生成随机数 x,并用 Ac 加密后生成结果 S(x),发送给客户端
      2. 客户端使用 Bc 解密 S(x) 得到 x
      3. 客户端计算 q + x 的 md5 值 n(q+x),q为上一步得到的会话密钥
      4. 服务器计算 q + x 的 md5 值 m(q+x)
      5. 客户端将 n(q+x) 发送给服务器
      6. 服务器比较 m(q+x) 和 n(q+x),两者相同则认证成功

    参考文章:http://blog.csdn.net/cnbird2008/article/details/8038926

    完整演变过程:http://blog.csdn.net/wzzvictory/article/details/9015155

    --------------------------------------------------------------------------------

    2015年9月11日

    直接把无锡58.241.41152的私钥、公钥 复制到阿里云的166上。

    scp id_rsa id_rsa.pub root@123.57.207.166:/mnt

    然后拷贝到 /root/.ssh/目录下

    166机器就可以不要密码访问58.241.41。150了

  • 相关阅读:
    windows使用.NET CORE下创建MVC,发布到linux运行
    linux使用.net core 创建简单的MVC
    .net core 简单项目的创建
    Linux下配置mysql远程访问
    把二维码的图片和文字结合到一个背景图片上,合成一张图
    MvcPager帮助文档 — PagerOptions 类
    集合对象去重
    主键、外键
    SQL、T-SQL与PL-SQL的区别
    SqlServer 连接GreenPlum问题处理
  • 原文地址:https://www.cnblogs.com/bluewelkin/p/4487925.html
Copyright © 2011-2022 走看看