• Linux 期中架构 SSH


    为其他网络服务提供安全协议。替代Telnet

        SSH:   实现数据加密传输 22  默认支持root用户远程连接

    类似sftp-server服务

    nmap -p 22 10.0.0.41

    nc 10.0.0.41 22

        telnet:实现数据明文传输 23  默认不支持root用户远程连接

    ###    1个服务始终无法启动

    ##

    01 查日志

    ##

    02 检查服务端口有无冲突

    ##

    netstat -lntup | grep 873

     

    ##ssh远程服务对比

     

     

    如何实现telnet远程管理:

    服务端配置

    第一里程:下载安装telnet远程管理服务端软件

    yum install -y telnet-server telnet

      

    第二里程:编写xinetd文件,实现管理telnet服务

    特殊的服务:telnet  rsync

    vim /etc/xinetd.d/telnet

    disable = no

     

    第三里程:启动telnet服务

        /etc/init.d/xinetd start

    第四里程:进行服务检查测试

    netstat -lntup|grep 23

    [root@m01 ~]# /etc/init.d/xinetd restart

    Stopping xinetd:                                           [  OK  ]

    Starting xinetd:                                           [  OK  ]

    ssh 服务与telnet服务区别

    ssh服务是加密服务协议 telnet是非加密服务协议

    ssh服务默认支持root用户登录   telnet不支持root用户登录

    SSH知识要点   SSHv2     SSH和SFTP SCP

     

    SSH服务命令说明

    查看命令属于哪个命令大礼包

    [root@m01 ~]# rpm -qf `which ssh`

    openssh-clients-5.3p1-122.el6.x86_64

    [root@m01 ~]# rpm -ql openssh-clients

    /etc/ssh/ssh_config     --客户端配置文件

    /usr/bin/.ssh.hmac

    /usr/bin/scp                     ###远程复制命令

    /usr/bin/sftp                   ###远程文件传输服务

    /usr/bin/slogin               ###远程登录命令    slogin 10.0.0.41

    /usr/bin/ssh                      ###远程登录管理主机命令

    /usr/bin/ssh-add

    /usr/bin/ssh-agent

    /usr/bin/ssh-copy-id    ###ssh服务分发公钥

    /usr/bin/ssh-keyscan

    /usr/libexec/openssh/ssh-pkcs11-helper

     

    [root@m01 ~]# rpm -ql openssh-server

    /etc/pam.d/ssh-keycat                           

    /etc/pam.d/sshd

    /etc/rc.d/init.d/sshd        ###ssh服务启动脚本文件

    /etc/ssh/sshd_config          ###ssh服务配置文件

    /etc/sysconfig/sshd

    /usr/libexec/openssh/sftp-server

    /usr/libexec/openssh/ssh-keycat

    /usr/sbin/.sshd.hmac

    /usr/sbin/sshd                        ###ssh服务进程启动命令

    [root@m01 ~]# ps -ef | grep ssh

    root       1182      1  0 01:19 ?        00:00:00 /usr/sbin/sshd

    root       6246   1182  0 08:04 ?        00:00:00 sshd: root@pts/0

    root       6280   6248  0 08:09 pts/0    00:00:00 grep ssh

    启动命令:/usr/sbin/sshd     要用绝对路径进行启动

    SSH服务软件版本

    SSH服务是守护进程服务daemon  sshd

     

    SSH服务实现连接安全建立连接,利用钥匙和锁头

    01  钥匙==私钥   公钥==锁头     私钥可以解密公钥(钥匙可以开启锁头)

    02  公钥可以在网络中传输,私钥可以在本机主机保存

        1)客户端发出远程连接请求

        2)服务端会响应一个确认信息        

    3)客户端进行确认并输入密码信息

    4)服务端会发送一个公钥信息(锁头)给客户端

    5)客户端拥有了公钥(锁头)信息

    sshv1版本:钥匙和锁头不会定期更换,容易被黑客人员破解

    sshv2版本:钥匙和锁头会进行定期更换,不容易被黑客人员破解

     

     

     

    SSH服务认证类型

        基于密码的方式:交互方式远程连接

    基于密钥的方式:免交互方式远程连接

    基于密钥:

     

     

    基于密钥方式工作原理:

    1)在客户端创建出新的钥匙和锁头,创建了一个密钥对

    2)客户端将锁头传输给服务端(基于密码传输)

    3)服务端保存后接受公钥文件(锁头)

    4)当客户端再次请求和服务端建立连接

    5)服务端会进行公钥质询过程

    6)客户端利用私钥解密公钥,将解密结果发给服务端

    7)最终实现客户端和服务端远程连接建立

    SSH面试考题

     

     

    [root@m01 ~]# ss -lntup | grep 22

    tcp    LISTEN     0      128                   :::22                   :::*      users:(("sshd",1182,4))

    tcp    LISTEN     0      128                    *:22                    *:*      users:(("sshd",1182,3))

     

    SSH配置文件信息

    ssh配置文件修改--默认登录参数

    [root@m01 ~]# cd /etc/ssh/

    [root@m01 ssh]# ll

    total 156

    -rw-------. 1 root root 125811 Mar 22  2017 moduli

    -rw-r--r--. 1 root root   2047 Mar 22  2017 ssh_config

    -rw-------  1 root root   3876 May  2 14:52 sshd_config

    /etc./ssh/sshd_config     ###sshd配置文件

     

    01   井号注释的参数信息  表示默认配置

    修改默认端口号

    #Port 22    ###进行修改

    #ListenAddress 0.0.0.0      

    配置文件修改后要重启才能生效  

    [root@m01 ssh]# /etc/init.d/sshd restart

    Stopping sshd:                                             [  OK  ]

    Starting sshd:                                             [  OK  ]

    #ListenAddress 0.0.0.0         ###10.0.2.10 -->指定监听的网卡信息

     

    SSH监听配置测试

     

    如果连接慢需要修改2个参数

    GSSAPIAuthentication no

    UseDNS no

     

     

    SSH服务入侵防范

     

     

    [root@m01 ssh]# nmap -p 1-1024 www.baidu.com

    Starting Nmap 5.51 ( http://nmap.org ) at 2018-06-04 09:27 CST

    Nmap scan report for www.baidu.com (61.135.169.121)

    Host is up (0.025s latency).

    Other addresses for www.baidu.com (not scanned): 61.135.169.125

    Not shown: 1022 filtered ports

    PORT    STATE SERVICE

    80/tcp  open  http

    443/tcp open  https

    Nmap done: 1 IP address (1 host up) scanned in 49.93 seconds

    SSH服务相关命令用法

    01  SSH远程登录命令

     

     

    02      SCP远程复制数据命令

     

    03  SFTP命令   数据传输命令

     

     

     

    ###SSH-key基于密钥认证部署

    管理机:M01

    受控端:backup

    nfs01

    web01

     

    部署过程:(运维领域:越安全 效率越低   效率越高安全性越低)

    1 第一个里程碑   在管理服务器上创建密钥对信息 (公钥和私钥)

    [root@m01 ~]# ssh-keygen -t dsa

    Generating public/private dsa key pair.

    Enter file in which to save the key (/root/.ssh/id_dsa):    ###私钥创建后保存位置

    Enter passphrase (empty for no passphrase):                                 ###确认私钥需不需要进行加密设置密码,测试环境设置为空

    Enter same passphrase again:                                                                  ###设置密码为空

    Your identification has been saved in /root/.ssh/id_dsa.

    Your public key has been saved in /root/.ssh/id_dsa.pub.

    The key fingerprint is:

    83:63:87:1d:98:cc:4a:d2:c0:f5:0c:b0:78:5d:bb:bf root@m01

    The key's randomart image is:

    +--[ DSA 1024]----+

    | .ooo .          |

    | ..= B +         |

    |. + + O .        |

    | . o . = .       |

    |    . * S        |

    |     . + .       |

    |        .        |

    |         .       |

    |        E        |

    +-----------------+

    [root@m01 ~]# cd /root/.ssh/

    [root@m01 .ssh]# ll

    total 12

    -rw------- 1 root root 672 Jun  4 10:21 id_dsa                                       ###创建生成的私钥文件(钥匙)

    -rw-r--r-- 1 root root 598 Jun  4 10:21 id_dsa.pub                               ###创建生成的公钥文件(锁头)

    -rw-r--r-- 1 root root 786 May 19 15:53 known_hosts

    2 第二个里程碑      分发公钥文件     id_dsa.pub -->    authorized_keys

    -i  指定要分发的公钥文件和路径信息

    [user@]  ---以什么用户分发公钥    如果不输入以当前系统用户分发公钥

    machine -->将公钥分发到哪台主机上

    [root@m01 ~]# ssh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.8

    The authenticity of host '172.16.1.8 (172.16.1.8)' can't be established.

    RSA key fingerprint is c8:17:90:8d:90:a4:f7:5b:10:19:36:7a:6c:5d:b8:7b.

    Are you sure you want to continue connecting (yes/no)? yes

    Warning: Permanently added '172.16.1.8' (RSA) to the list of known hosts.

    root@172.16.1.8's password:

    Now try logging into the machine, with "ssh 'root@172.16.1.8'", and check in:    <--现在可以试图登录远程主机,利用ssh  root@172.16.1.8  进行登录  -->

      .ssh/authorized_keys

    to make sure we haven't added extra keys that you weren't expecting.

    [root@nfs01 ~]# ll /root/.ssh/

    total 8

    -rw------- 1 root root 1794 Jun  4 10:42 authorized_keys

    3 第三个里程碑     登录测试     不要输入密码就可以直接登录了

    [root@m01 ~]# ssh root@172.16.1.8

    Last login: Wed May 23 21:40:28 2018 from 10.0.0.1

    [root@web02 ~]#

    说明:显示以上信息表明基于密钥的登录信息已经成功了

    4   第四个里程碑   免登录执行命令操作

    [root@m01 ~]# ssh root@172.16.1.8 "hostname -i"    -->   不用登录到远程主机,直接在远程主机上执行命令  返回输出结果

    172.16.1.8

    说明批量管理主机

    ###基于密钥批量管理主机的扩展

    思考:如果服务端端口号修改了,可以正常分发公钥?

    [root@m01 bin]# vim ssh-copy-id

    A:第一种解决方法  在$1 前新增   -p52113  (修改的端口),再次执行分发公钥就可以解决

    B:第二种解决方法

    在语句:ssh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.31当中

    $1  表示的是root@172.16.1.31

    修改后的语句为:ssh-copy-id -i /root/.ssh/id_dsa.pub "-p52113 root@172.16.1.31"

    shift参数,在shell当中很有用;

    作用:  sh test.sh  a  b c  d

    echo $1 $2 $3 $4

    shift    -->将传参的参数向前递进

    循环:for 循环

    white 循环

    until    循环     循环条件为真时   停止循环,为假时,一直循环(死循环)

    [root@m01 scripts]# cat shift.sh

    #!/bin/bash

    until [ $# -eq 0 ]                        ###    $# 传参的总个数

    do

        echo $*                                         ###     $*  把所有传参的参数都输出出来

        shift

    done

    [root@m01 scripts]# sh shift.sh 1 2 3 4 5 6

    1 2 3 4 5 6

    2 3 4 5 6

    3 4 5 6

    4 5 6

    5 6

    6

    说明    分发公钥的实质 ,就是通过ssh远程执行公钥命令

    1      切换到用户家目录下;临时设置umask值

    2      test  类似于if  判断客户端相应用户家目录中有没有.ssh目录;如果没有就进行创建

    3      将管理端公钥文件中的内容添加到客户端 .ssh/authorized_keys   默认该文件不存在;需要创建,文件权限(600)

    问题2   01  分发公钥时实现免交互

    为什么要实现免交互:

    当被管理主机众多时,需要采用批量分发,通过批量分发脚本,会产生阻碍因素,因此期望能够实现免交互

    阻碍脚本运行的因素

    01 创建密钥对时,需要进行交互

    a     指定创建私钥文件保存路径

    b     指定私钥文件加密的密码信息

    02  分发公钥时,需要进行交互

            a   需要yes/no 确认交互

            b   第一次分发公钥要输入密码

    批量分发公钥脚本

     1 #!/bin/bash
     2 
    m /root/.ssh/id_dsa*
     3 ssh-keygen -t dsa -f /root/.ssh/id_dsa -P "" &>/dev/null
     4 #ssh-keygen -t dsa -f /root/.ssh/id_dsa -P "" -q    ### 等价于上一种写法  -q安静的执行 不要输出
     5 #分发密钥文件
     6 for ip in 31 41
     7 do
     8     echo "==================================fenfa begin======================================="
     9     sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no root@172.16.1.$ip"
    10     echo "==================================fenfa end========================================"
    11     echo ""
    12 done
    View Code

    密斗性

    脚本编写完要可以反复执行  而且没有报错

    该脚本依赖需要安装sshpass

    [root@m01 scripts]# rpm -qa sshpass

    sshpass-1.06-1.el6.x86_64

    部署完毕后要检查:

    [root@m01 scripts]# ssh 172.16.1.8 hostname

    web02

    批量检查脚本:

     1 #!/bin/bash
     2 #ssh 172.16.1.41 free -m
     3 #ssh 172.16.1.31 free -m
     4 #批量测试的脚本更新版本
     5 CMD="$1"
     6 for ip in 31 41
     7 do
     8     echo "========>INFO 172.16.1.$ip<======="
     9     ssh 172.16.1.$ip "$CMD"
    10     echo "========>INFO end<========="
    11     echo ""
    12 done
    View Code 

    执行结果:

    [root@m01 scripts]# sh batch_manger1.sh "hostname"

    ========>INFO 172.16.1.31<=======

    nfs01

    ========>INFO end<=========

    ========>INFO 172.16.1.41<=======

    ssh: connect to host 172.16.1.41 port 22: Connection timed out

    ========>INFO end<=========

    ========>INFO 172.16.1.8<=======

    web02

    ========>INFO end<=========

  • 相关阅读:
    sqlserver查询数据的所有表名和行数
    java内存查看与分析
    jboss中JVM监控
    建设一个能承受500万PV/每天的网站如果计算?
    Java MVC框架性能比较
    struts1,struts2,springMVC终极对比
    struts2的action是线程安全的,struts1的action不是线程安全的真正原因
    浅析Struts1和Struts2的Action线程安全问题
    xml bug之cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration...
    eclipse调试web项目
  • 原文地址:https://www.cnblogs.com/nodchen/p/9132755.html
Copyright © 2020-2023  润新知