zoukankan      html  css  js  c++  java
  • SSH免密远程登陆及详解

        SSH(安全外壳协议):为建立在应用层和传输层基础上的安全协议,ssh是目前较为可靠,专门为远程登陆,会话和其他网络服务提供安全 协议。利用ssh协议可以有效的防止远程管理过程中的信息泄露问题,传统的网络服务程序,如ftp,pop和telnet在本质上都是 不安全 的, 因为他们在网络上用明文传输口令和数据,通常使用SSH,可以把所有传输的数据进行加密,能够防止DNS欺骗和IP欺骗,使用SSH,还有一个额外的好处就是传输的数据进过压缩,所以可以加快传输的速度,SSH有很多功能,既可以代替Telnet,又可以为FTP,pop,甚至为PPP提供一个安全的通道,

          验证:对于客户端来说,SSH提供两种级别的安全验证,

    1.基于口令的安全验证

      只要知道自己的账号和口令,就可以登陆远程主机,所有传输的数据都会被加密,但是不能保证正在连接的服务器 就是你想连接的服务器可能会有别的服务器在冒充真正服务器,也就是收到“中间人”这种攻击

    2.基于密钥的安全验证

    需要依靠密钥,也就是你必须为自己创建的一对密钥,并把公用密钥放在需要访问的服务器上,客户端软件就会向服务器发送请求,请求用你的密钥进行安全验证,服务器收到请求之后,现在该服务器上你的主目录下寻找你的公用密钥,然后把它和你发送过的公用密钥进行比较,如果两个密钥一致,服务器就用公用密钥加密“质询”,并把它发送给客户端软件,客户端收到“质询”之后就可以用你的私人密钥解密在把它发送给服务器

    用这种方式,可以增加自己密钥的口令,但是与第一种级别相比,第二种级别 不需要再网络上传送口令,第二种级别不仅加密所有的数据,而且“中间人”这种方式也是不可能的(因为他没有你的私人密钥,)但是整个登录的过程中需要10秒

      层次:

    SSH主要享有三部分组成:

    *传输层协议【SSH-TARNS】

    提供了服务器认证,保密性及完整性,此外它还提供了压缩功能,SSH-TARNS通常运行在TCP/IP连接上,也可能用于其他可靠数据流上,SSH-TARNS提供了强力的加密技术,密码主机认证 及完整性保护,

    该协议中认证基于主机,并且该协议不执行用户认证,更高层的用户认证可以设计为此协议之上

    *用户认证协议【SSH-USERAUTH】

    用户向服务器提供客户端用户鉴别功能,它运行在传输层协议SSH-TARNS上面 ,当SSH-USERAUTH开始后,它从底层协议那里接受会话标识符,会话标识符唯一标识会话并且适用于标记已证明私钥的所有协议,SSH-USERAUTH也需要 知道底层协议是否提供保密性保护。

    *连接协议【SSH-CONNECT】

    将多个加密隧道分成逻辑通道,它运行在用户认证上,提供了交互式登录,远程命令执行,转发TCP/IP连接

    authorized_keys:存放远程免密登录的公钥,主要通过这个文件记录多台机器的公钥

      id_rsa : 生成的私钥文件

      id_rsa.pub : 生成的公钥文件

      know_hosts : 已知的主机公钥清单

        如果希望ssh公钥生效需满足至少下面两个条件:

          1) .ssh目录的权限必须是700 

         2) .ssh/authorized_keys文件权限必须是600

    【实验案例】

    将两台机器开通SSH,最终是的三台机器可以互相免密远程登录

    [zhangsan@Joyheros-iPhone ~]$ ssh-keygen -t rsa 

    [xiaoyu@localhost ~]$ ssh-keygen -t rsa

    我们要想免密登录xiaoyu这台机器,我们需要将自身的公钥发给对方特定的目录下(.ssh/authorized_keys)

    # ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.20.138

    或者

    [zhangsan@Joyheros-iPhone .ssh]$ scp id_rsa.pubxiaoyu@192.168.20.138:/home/xiaoyu/.ssh/authorized_keys

    [zhangsan@Joyheros-iPhone .ssh]$ ssh xiaoyu@192.168.20.138

    Last login: Mon Jun  5 23:17:42 2017 from 192.168.20.167

    [xiaoyu@localhost ~]$     #免密登录成功

    同理!我们从xiaoyu这台机器上免密登录zhangsan这台机器,也是生成公私密钥之后,将自己的公钥给对方zhangsan主机

    [xiaoyu@localhost .ssh]$ scp id_rsa.pub zhangsan@192.168.20.167:/home/zhangsan/.ssh/authorized_keys

    [xiaoyu@localhost .ssh]$ ssh zhangsan@192.168.20.167

    Last login: Mon Jun  5 22:52:33 2017

    [zhangsan@Joyheros-iPhone ~]$#免密登录成功

    PS:当我们需要免密登录对方机器时,需要修改目标端主机的sshd_conf配置文件中开启密钥验证的权限如下:

    vim /etc/ssh/sshd_config

    HostKey /etc/ssh/ssh_host_rsa_key
    HostKey /etc/ssh/ssh_host_ecdsa_key
    HostKey /etc/ssh/ssh_host_ed25519_key
    SyslogFacility AUTHPRIV
    PermitRootLogin no   #禁止root用户登录
    PubkeyAuthentication yes   #是否开启公钥登录验证
    AuthorizedKeysFile    .ssh/authorized_keys    #指定公钥验证路径
    PermitEmptyPasswords no   #设置是否允许密码为空的账号登录
    PasswordAuthentication no   #设置是否开启密码验证机制
    ChallengeResponseAuthentication no    #是否接受任何密码认证
    GSSAPIAuthentication yes  
    GSSAPICleanupCredentials no
    UsePAM yes
    X11Forwarding yes
    UseDNS no    #指定sshd是否应该对远程名进行反向解析,以此来检查主机名是否与其IP地址真实对应,建议改成no,否则会导致ssh连接很慢
    AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
    AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
    AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
    AcceptEnv XMODIFIERS
    Subsystem    sftp    /usr/libexec/openssh/sftp-server

     ps:后续普通目录下的~.ssh的权限为700权限,而公钥的权限为600

    后续拷贝公钥时即可执行# ssh-copy-id -i /root/.ssh/id_rsa.pub 【目标主机名&&IP地址】

  • 相关阅读:
    整理Xen理论知识
    搭建Hadoop
    Java、中Date的格式初始化以及Calendar的使用
    学习Xen
    关于mpi的理论知识以及编写程序来实现数据积分中的梯形积分法。
    题解-CF1396C Monster Invaders
    题解-CF1139D Steps to One
    qq 表情库
    题解-洛谷P6788 「EZEC-3」四月樱花
    题解-CF1401E Divide Square
  • 原文地址:https://www.cnblogs.com/bixiaoyu/p/6952752.html
Copyright © 2011-2022 走看看