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)在连接就可以了                                           结束

posted @ 2018-11-09 17:16  CTW1  阅读(310)  评论(0编辑  收藏  举报