zoukankan      html  css  js  c++  java
  • SSH-key连接原理

    1,我们想通过远程的方式从我的电脑远程连接到对方的电脑上那么在LINUX系统下我们可以通过一种叫ssh的方式连接过去。SSH客户端(ssh命令)还包含一个很有用的远程安全拷贝命令scp。

    2,有两种连接方式,

    (1)telnet  这种是明文的容易让黑客捕获。

    应用方式:安装telnet(远程登录的意思)

    Yum –y install telnet

    安装好后怎么链接呢?

    如 telnet 192.168.112.356 22      IP是对方IP地址

                                                                          22端口号、

    当然对方也要安装telnet

    (2)ssh 是经过加密的。

    3,ssh有两种级别的连接方式

    第一种级别(基于口令的安全验证)

    只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。第二种级别(基于密匙的安全验证)

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

    总结1,

    ssh连接第一级别:

     ssh连接默认端口是22

    (1)

     有两台电脑 A和B.                       A要登录 B电脑的超级用户

    #ssh 192.168.29.144                   登录超级用户IP前不用加@

    第一次连接 会问你 记录不记录对方IP地址, 必须记录 YES

    之后对方密码弹出 输入对方的密码回车

    用hostname –I  查看下本机IP地址,这样就是对方的IP地址对方的主机了。

    然后exit退出,就等退出了

    (2)

    有两台电脑 A和B.                       A要登录 B电脑的普通用户  (不是超级用户)

    添加个用户

        如我现在在另一台电脑添加用户

         Useradd yunjisuan   创建一个叫yunjisuan 的用户   路径时/home 目录

         Echo “123123” | passwd  - -stdin yunjisuan   给yunjisun 用户添加密码。

    我现在在第一台电脑我用ssh连接另一台电脑的 yunjisuan用户

    A电脑 输入: ssh yunjisuan@192.168.,29.144  (ip地址前不加东西就是超级用户)

    之后输入密码:123123     就登录进去了

    (3)

    远程复制在电脑双方都要安装 scp命令

    yum insiall openssh-clients   (打开ssh客户端)  安装scp远程复制命令

    之后怎么做呢?

    1,我在A电脑

    映射一句话    到/etc/hosts里

     # echo "'hostname –I' www.yunjisuan.com" >> /etc/hosts

    Cat /etc/housts 看一下。 没问题

    再用scp复制,把A的housts目录复制到B电脑  超级用户 /root/etc下

    #scp /etc/hosts  192.168.29.144:/etc/回车  复制hosts这个目录过去。

    注意:没加root@192.168.29.1144 就是默认超级用户登录。

    上B电脑查看 cat /etc/hosts  就有了

      2,以上我是把我A电脑的数据复制过。

    去接下来。

    我要把B电脑的数据拉过来怎么操作呢? 

      用#:scp root@192.168.29.144:~/222 .

            这是把B电脑的  根下YYY文件复制到我A电脑的  点 当前目录下。

    总结2

    ss h连接第二级别

    秘钥的意义就在于不用输密码,就进入对方的服务端。

    1,首先  创建秘钥对

    ssh    Tab一下 会发现很多命令

       Ssh-Keygen 生成秘钥对的命令    (交互生成秘钥)

    Ssh-copy-id分发秘钥对的命令

    (1)# Ssh-Keygen 回车

    会出来这三样,第一个…..(/root/.ssh/id_rsa) 这是这个命令 在根下root下 .ssh 点就是隐藏文件。后边的id_rsa就是秘钥对的名字     (在这个目录下生成一个叫id_rsa的文件)          

                           第二个是密码  直接回车不设就行

                           第三个也是密码,直接回车

                           就创建完了。

    (2)#ls .ssh   看一下  有三个文件 分别是

    id_rsa 私钥     id_rsa.pub 公钥           known_hosts远程登录记录

    客户端拿私钥     服务端拿公钥 (就是谁登录谁 就把公钥发给谁)

    私钥可以有很多份,但公钥只能有一份,私钥去找公钥。

    (3)我现在在客户端创建了秘钥对

            现在得把公钥给服务端复制过去                    

    怎么操作呢? 

    首先(1)在服务端家目录下创建一个 mkdir  .ssh  目录

    (2)ll  -d  .ssh/   看看他是什么权限?  为什么看呢?因为你的秘钥权限过大,Linux系统担心安全是不会让你成功的。

    所以你得给它设置下权限(客户端服务端双方都要设置700权限)

          #:chmod 700 .ssh/             它权限必须是700

    (3)在服务端把公钥改名vi /etc/ssh/sshd_config

             进入编辑器在47行  复制authorized_keys 这个名字

              mv id_rsa.pub authorized_keys     改成这个名字

                       set nu                                   显示行号

    或者cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys  这样改名

    (5)现在来客户端把公钥 复制过去给服务端(或者相反)

    #:scp .ssh/authorized_keys 192.168.29.144:~/.ssh/

    (6)还有些提高效率的操作。

    vim /etc/ssh/sshd_config 后  

    79行改成no             (centOS6是81行 改成on)  这是验证改成on 不验了

    115行改成no           (centOS6是122行 改成on)   NDS 改成no

    之后重启一下systemctl restart network

    然后scp /etc/ssh/sshd_config root@192.168.29.144:/etc/ssh/

    这个sshd_config这个修改后的配置文件给对方发过去。覆盖对方的配置文件(省得对方改了)  这是ssh的配置文件。

    对方也重启一下systemctl sshd reload

    (7)ssh  192.168.29.144  这就无密码的连接上了 

     结束           这就是秘钥连接 免秘钥的过程。

    但是你连普通用户照样还有密码,除非普通用户也有公钥照以上这么改。

    示范一下连接普通用户

    前提:要在对方电脑上创建个普通用户

    (1)Useradd yunjisuan   创建一个叫yunjisuan 的用户  路径在/home 里

              Echo “123123” | passwd –stdin yunjisuan   给yunjisun 用户添加密码。

            (2)然后进去对方电脑普通用户下(yunjisuan下)创建

    #:mkdir   .ssh 目录   

    在改.ssh的属主为yunjisuan   #:chown yujisuan  .ssh

                    权限为700           #:chown 700  .ssh

                                               #:ll –d .ssh   查看下

    (3) 因为普通用户里没有.ssh目录。所有要把我方的公钥给复制过去到yunjisuan用户的超级用户也就是~家目录里

    #scp ~/.ssh/authorized_keys yunjisuan@192.168.29.144:~

    (4)然后进去对方电脑cd /home/yunjisuan  就有authorized_keys文件了。

    在把authorized_keys移到  .ssh里

    mv authorized_keys  .ssh

    (5)但是这时我进的是普通用户,普通用户要能用这文件就要把authorized_keys的属主改成普通用户:   

    #:chown yujisuan  authorized_keys

    (6)连接ssh yunjisuan@192.168.29.144 就连接上了

     总结3

    ssh 秘钥连接的简化方式

    在客户端.ssh下  还有个ssh-copy-id  它是用来分发公钥的刚才服务端做的那些操作它都能自动来完成。

    (1)

    一条命令生成秘钥对。 而不用之前的ssh-Keygen 生成秘钥对的命令  (交互生成手动分发)

            -d dsa   指定加密算法 dsa

             -f         指生成的秘钥放在哪里

             -P         杠大P “”里边没东西就是空密码

    #ssh-keygen –t dsa –f ~/.ssh/id_dsa –P “” 回车

    (2)一条命令分发

    我现在要分发

             -i    你要分发什么?(要分发这个~/.ssh/id_dsa.pub公钥)

             ssh-copy-id –i ~/.ssh/id_dsa.pub yunjisuan@192.168.29.144

               现在进入服务端 家目录下/home

    Ls –a 看一下  yunjisuan

    最后一行多了一个700权限属主属组都是yungjisuan(直接就把权限改了)

    回车后再看下.ssh里边公钥在不在。

        之后用客户端直接连接服务端。可以了

    (3) 但是以上步骤分发秘钥时还需要输入密码。  怎么把这个密码也删掉呢?

           有个命令叫sshpass    需要云yum安装本地yum没有

    sshpass –p “123123”   输入密码之后再分发。

           #sshpass –p “123123” ssh-copy-id –i ~/.ssh/id_dsa.pub yunjisuan@192.168.29.144

          之后登陆OK了

    (4)cd .ssh回车

    Ls里有个这个目录  known_hosts 

    这是记录来访的IP  如果要清空了,再去登陆对方还要输入密码

    清理方法是[.ssh] #  > know_hosts

    怎么做我在清空known_hosts后,在连接对方,还能免密的连接上呢?

    需要再加几个参数:

    –o StrictHostKeyChecking=no

    #sshpass –p “123123” ssh-copy-id –i ~/.ssh/id_dsa.pub “–o StrictHostKeyChecking=no  yunjisuan@192.168.29.144” 回车

    (5)在连接就可以了                                           结束

  • 相关阅读:
    Github.Git
    android 环境的配置
    如何在Virtual box 下安装Mac os
    如何下载google play商店里面的app?
    神奇的网站
    pycharm使用总结
    软件测试 -- SQL注入测试
    win10 下mysql环境变量配置
    NStask
    在pycharm 中使用 GitHub:
  • 原文地址:https://www.cnblogs.com/changtianwei/p/9936178.html
Copyright © 2011-2022 走看看