zoukankan      html  css  js  c++  java
  • ssh的秘钥认证

    ssh秘钥认证简述

    通常我们会使用x-shellputtyMobaXterm等支持ssh连接的工具去登录服务器进行管理,而执行ssh命令、scp命令等从一台服务器登录另外一台服务器的时候,通常需要我们输入对应用户的密码,除了用户名/密码模式外,实际上还支持ssh秘钥登录,熟悉git工具的同学对此一定不会陌生,gitlab、github等都会支持http连接和ssh连接两种模式,而ssh模式会在我们本机中生成私钥文件(id_rsa)、公钥文件(id_rsa.pub)、认证信息文件(known_hosts)等,如图:
    keys.png

    生成公钥和私钥

    利用公钥、私钥对进行身份认证或者信息加密不是本文的重点,感兴趣的同学可以自行搜索资料了解对应的原理,下面开始介绍ssh的相关命令

    默认情况下的Linux主机或者windows主机没有前面提到的公钥、私钥、认证信息等文件,我们通过ssh-keygen命令来生成(ssh key generate的缩写):
    ssh-keygen

    上图中的交互式过程很好理解,默认把私钥生成到/root/.ssh/id_rsa中(本例用的root用户登录,其它用户默认会在自己的home目录的/.ssh/下生成),然后是否给私钥再加入密码(给私钥加密码则每次用私钥认证还需要再输入密码,不是我们想要的效果了),我们直接回车跳过,这样我们就得到了自己的公钥和私钥对了。当然,这里采用的加密算法默认是rsa,我们也可以选择其他的加密算法,例如:dsa、ecdsa、ed25519,得到的文件也会不同,这里我们只采用默认的。

    免秘钥登录

    想要免秘钥登录别的机器,那么需要把自己的公钥给别的机器做认证,别人才会允许你登录,命令就是:ssh-copy-id

    例如:我们要从172.16.101.4这台机器ssh登录172.16.101.34,输入命令:

     ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.16.101.34
    

    其中-i参数表示指定本机的公钥文件
    (ssh-copy-id

    根据提示输入了172.16.101.34的登录密码后,就会在172.16.101.34机器上生成认证文件/root/.ssh/authorized_keys:
    authorized_keys

    仔细对比就会发现,这里生成的认证信息,就是172.16.101.4的公钥文件的内容,这条命令实际上就是拷贝公钥到172.16.101.34,为什么我们不直接拷贝呢?因为直接拷贝需要建立文件夹、建立文件、赋予正确的权限、拷贝内容编码、拷贝是否完整等一系列问题,容易造成错误,不如直接执行命令来的方便~当然,我们也给出拷贝命令:

    cat ~/.ssh/id_rsa.pub | ssh -p 22 root@172.16.101.34 "umask 077;mkdir -p ~/.ssh;cat - >> ~/.ssh/authorized_keys"
    

    如果要连接的服务器不是采用的默认22端口,那么我们需要在命令中指定具体端口
    当前服务器为centos6:

    ssh-copy-id -i ~/.ssh/id_rsa.pub "root@172.16.101.34 -p 端口号"
    

    当前服务器为centos7:

    ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.101.34 -p 端口号
    

    至此,我们就能通过ssh命令免密码登录到其他机器了。至于这个有什么用,在ansible的主机管理与通讯部分会用到~

  • 相关阅读:
    AC自动机模板2(【CJOJ1435】)
    AC自动机模板1(【洛谷3808】)
    【HDU 2063】过山车(二分图最大匹配模板题)
    矩阵快速幂
    Trie树
    AC自动机
    高斯消元法
    KMP算法 Next数组详解
    端口映射
    最全面的HashMap和HashTable的区别
  • 原文地址:https://www.cnblogs.com/huangmengke/p/11497740.html
Copyright © 2011-2022 走看看