zoukankan      html  css  js  c++  java
  • ssh远程管理

    服务应用:

        rsync
        nfs
        sersync
    运维: 
        怎么连接服务器
            SSH
        怎么批量部署

    1.SSH基本概述
    SSH是Secure shell Protocol的简写
    在进行数据传输之前,SSH先对联机数据包通过加密技术进行加密处理,加密后进行数据传输,确保了传递的数据安全

    1).远程连接方式有哪些
        talnet属于明文连接方式,监听在本地23/tcp端口
        ssh属于密文连接方式,监听在本地22/tcp端口
    
    2).SSH远程连接与Telnet远程连接区别
        ssh服务是加密服务协议,telnet服务是非加密服务协议
        ssh服务默认支持root用户登录,telnet默认不支持root用户登录
    
    3).SSH远程服务主要功能
        1.提供远程连接服务器的服务
        2.对传输的数据进行加密
    
    4).具体应用
        telnet主要应用在内网,针对网络设备(路由器,交换机,防火墙)
        ssh针对服务器
     
        通过端口镜像抓其他交换机接口的包

    案例:使用vireshark验证telnet明文传输与ssh加密传输
    环境:
    远程服务器:CentOS7.7 m01 10.0.1.71
    客户端:windows 10 wrieshark

    1.安装telnet-server,实现telnet服务
    [root@m01 ~]# yum install -y telnet-server
    [root@m01 ~]# systemctl start telnet.socket

    2.创建普通用户,用来登录telnet

    [root@m01 ~]# useradd oldboy
    [root@m01 ~]# echo 123456 | passwd --stdin oldboy

    测试服务器端口有没有开启
    telnet 10.0.1.71 22
    ss -Intup | grep 22
    netstat -Intup
    nmap -p 22 10.0.1.71
    nc 10.0.1.71 22

    ssh连接抓包结果

     telnet抓包结果

    2.SSH相关命令
    是一个典型的C/S架构

    客户端:
        Linux 
            openssh-clients
            ssh命令
        Windows
            Xshell SecureCRT、Putty    
        
    服务端
        openssh-server

    配置文件

    服务端:
    [root@m01 ~]# rpm -qc openssh-server 
    /etc/ssh/sshd_config
    客户端:
    [root@m01 ~]# rpm -qc openssh-clients 
    /etc/ssh/ssh_config
    客户端其他工具:
    [root@m01 ~]# rpm -ql openssh-clients 
    /usr/bin/scp     *****              --远程拷贝命令
    /usr/bin/sftp                       --远程文件传输命令
    /usr/bin/slogin                     --远程登录命令
    /usr/bin/ssh      *****             --远程连接登录命令  
    /usr/bin/ssh-copy-id  *****         --远程分发公钥命令  
    [root@m01 ~]# rpm -ql openssh
    /usr/bin/ssh-keygen  *****          --ssh秘钥生成工具
    
    openssh软件分析
    [root@m01 ~]# yum list openssh*
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
     * base: mirrors.aliyun.com
     * extras: mirrors.aliyun.com
     * updates: mirrors.aliyun.com
    Installed Packages
    openssh.x86_64                                                   7.4p1-21.el7                                    @anaconda
    openssh-clients.x86_64                                           7.4p1-21.el7                                    @anaconda
    openssh-server.x86_64                                            7.4p1-21.el7 
    
    [root@m01 ~]# rpm -ql openssh-server 
    /etc/ssh/sshd_config                --ssh服务配置文件
    /usr/sbin/sshd                      --ssh服务进程启动命令

    ssh客户端包含ssh以及像scp(远程拷贝)、slogin(远程登录)、sftp(安全FTP文件传输)等应用程序

    1).ssh远程登录服务器命令
    ssh -p22 oldboy@10.0.1.71 [commad]
    
    # ssh命令 
    # -p(小写),用于指定远程主机端口,默认22端口可省略
    # oldboy@remotehost
    # "@"前面为用户名,如果用当前用户连接,可以不指定用户
    # "@"后面为要连接的服务器的IP
    
    2).scp复制数据至远程主机命令(全量复制)
    
    # scp命令 
    # -p(大写)指定端口,默认22端口可不写
    # -r 表示递归拷贝目录 
    # -p 表示在拷贝文件前后保持文件或目录属性不变
    # -l 限制传输使用带宽(默认kb)
    
    推:PUSH,上传
    # scp -P22 -rp /tmp/oldboy oldboy@10.0.1.71:/tmp
    # /tmp/oldboy为本地的目录
    # "@"前为用户名
    # "@"后为要连接的服务器的IP
    # IP后的:/tmp目录,为远端的目标目录
    # 说明:以上命令作用是把本地/tmp/oldboy推送至远端服务器10.0.1.71的/tmp目录
    
    拉:PULL,上传
    # scp -P22 -rp root@172.16.1.51:/etc/passwd /tmp/
    # 还可以将远端目录或文件拉取至本地
    结论
    1.scp通过加密进行远程拷贝文件或目录的命令
    2.scp拷贝权限为连接的用户对应的权限
    3.scp支持数据的推送和拉取,但每次都是全量拷贝,效率低下。
    
    3).xftp远程数据传输命令
    一般采用图形化界面实现

    3.SSH连接方式

    1).基于账户密码远程登录
    
    知道服务器的IP端口,账号密码,即可通过ssh客户端登录远程主机,远程主机联机过程中传输数据库都是加密的。
    
    ssh -p22 root@10.0.1.51
    Last login: Thu Jan 23 15:01:11 2020 from 10.0.1.1
    [root@backup ~]# 
    
    2).基于秘钥远程登录
    
    默认情况下,通过ssh客户端登陆远程服务器,需要提供远程系统上的账号与密码,但为了降低密码泄露的几率和提高
    登陆的方便性,建议使用秘钥验证方式

    实验:
    mo1 通过秘钥远程登录backup
    实验步骤:

    1.在m01上生成秘钥对,-t秘钥类型,-C描述信息
    [root@m01 ~]# ssh-keygen -t rsa -C xiaoming@oldboyedu.com
    Generating public/private rsa key pair.
    Enter file in which to save the key (/root/.ssh/id_rsa): #秘钥保存的路径和文件名,直接回车,为默认值,不建议修改
    Enter passphrase (empty for no passphrase): #设置秘钥加密的密码,不建议设置,直接回车
    Enter same passphrase again:  #再次确认密码,不建议设置,直接回车
    
    命令执行后,一路回车到底
    
    2.将公钥传到backup的~/.ssh/authorized_keys
    //命令示例:ssh-copy-id [-i [identity_file]] [user@]machine
    ssh-copy-id //命令
    -i          //指定下公钥的路径
    [user@]     //以什么用户身份进行公钥分发(root),如果不输入,表示以当前系统用户身份分发公钥
    machine     //下发公钥至哪台服务器,填写远程主机IP地址
    [root@m01 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@172.16.1.51 
    [root@backup ~]# ls -a .ssh/
    
    //不登录主机执行命令
    [root@m01 ~]# ssh root@172.16.1.51 "free -m"
                  total        used        free      shared  buff/cache   available
    Mem:            972         103         774           7          94         748
    Swap:          2047           0        2047

    加个需求:
    rsync服务器需用被nfs服务器通过ssh使用秘钥登录

    1.在nfs服务器上生成密钥对
    [root@nfs ~]# ssh-keygen -t rsa -C nfs
    2.将nfs上的公钥分发到backup服务器上
    [root@nfs ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.51

    使用windows公钥登录服务器
    1.使用Xshell生成密钥对
    工具->新建用户密钥向导->下一步一直到用户密钥信息->修改密钥名称后,下一步到最后
    2.将公钥传到需要登录的服务器上。
    1)创建存放公钥的目录及文件

    mkdir ~/.ssh
    chmod 700 ~/.ssh
    vim ~/.ssh/authorized_keys,将xshell生成的公钥复制进来,保存退出
    chmod 600 ~/.ssh/authorized_keys

    4.SSH访问控制

    SSH远程服务访问控制手段
    一次服务器ssh裸奔的后果

    1.更改SSH服务远程登录端口               *****
    2.更改SSH服务监听本地内网IP             *
    3.更改SSH服务禁止ROOT管理员登录         ***
    4.更改SSH服务密码登录认证为密钥认证      *****
    5.重要服务器都不是有公网IP地址           ******
    6.使用防火墙限制来源IP地址              *

    1).SSH服务登录防护手段配置文件/etc/ssh/sshd_config

    Port 6666                #变更SSH服务远程连接端口
    ListenAddress 10.0.1.71  #绑定本地内网地址
    PermitRootLogin          #是否允许root用户远程登录
    PasswordAuthentication   #是否允许使用密码登录
    UseDNS                   #是否进行dns反向解析,影响ssh连接效率参数
    GSSAPIAuthentication     #是否进行认证,影响ssh连接效率参数

    2).SSH配置实例,添加如下配置至/etc/ssh/sshd_config,根据业务需求调整配置

    Port 6666                
    ListenAddress 10.0.1.71  
    PermitRootLogin no          
    PasswordAuthentication no  
    UseDNS no                  
    GSSAPIAuthentication no
    (1).修改端口号
    Port 6666
    验证登录效果
    Xshell:
    root@10.0.1.71 6666
    
    CentOS:
    [root@nfs ~]# ssh root@172.16.1.71 
    ssh: connect to host 172.16.1.71 port 22: Connection refused
    [root@nfs ~]# ssh root@172.16.1.71 -p6666 
    Last login: Fri Jan 24 19:53:06 2020 from 10.0.1.1
    [root@m01 ~]# 
    
    (2).修改监听IP
    ListenAddress 10.0.1.71 
    验证登录效果
    [root@backup scripts]# ssh root@172.16.1.71
    ssh: connect to host 172.16.1.71 port 22: Connection refused
    
    (3).关闭密码登录,默认ssh登录的顺序:先密钥,再密码登录
    PasswordAuthentication no 
    (4).禁止管理员root登录
    PermitRootLogin no 
    验证登录效果
    [root@nfs ~]# ssh root@172.16.1.71 
    root@172.16.1.71's password: 
    Permission denied, please try again.

    5.SSH练习参数

    环境:
    m01     172.16.1.71  10.0.1.71
    backup  172.16.1.51  10.0.1.51
    nfs     172.16.1.41  10.0.1.41    
    1.使用root用户完成一把钥匙开多把锁A钥匙,BC锁
    解法:
    1).在客户端A上生成密钥对
    [root@m01 ~]# ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa -C anlione 
    2).将公钥推送至BC
    [root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.41 
    [root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.51 
    
    2.在不破坏题1的前提下,完成多把钥匙开一把锁BC钥匙,A锁
    1).在客户端BC上生成密钥对
    [root@nfs ~]# ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa 
    [root@backup ~]# ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa 
    2).将公钥推送至A
    [root@nfs ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.71
    [root@backup ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.71
    
    3.如何实现从A指定目录或文件分发到BC服务器
    推送文件:
    [root@m01 ~]# dd if=/dev/zero of=test bs=1M count=100 
    [root@m01 ~]# scp -P22 -p test root@172.16.1.51:/tmp/  
    [root@m01 ~]# scp -P22 -p test root@172.16.1.41:/tmp/ 
    推送目录:
    [root@m01 ~]# scp -P22 -rp test root@172.16.1.41:/tmp/ 
    推送测速:单位是Kbit/s 
    [root@m01 ~]# scp -l 8000 test root@172.16.1.51:/tmp/  
    
    4.(附加题,不做要求)如何快速查看所有机器的load,CPU,Memory等信息(思考:服务器数量多,如何并发查看和分发数据)
    解法:
    #!/bin/bash
    [ $# -ne 1 ] && echo "执行错误,必须输入执行的命令,如果有空格,请输入双引号引起来" && exit 1
    
    for i in 41 51
    do
        echo "172.16.1.$i"
        ssh root@172.16.1.$i "$1" 
    done
  • 相关阅读:
    存储过程的优缺点?
    springboot注解
    springboot处理事务
    索引面试问题
    剑指Offer编程题(Java实现)——替换空格
    剑指Offer编程题(Java实现)——二维数组中的查找
    Java集合概括总结及集合选用
    Java中获取大小:length、length()、size()
    解决MarkDown打开出现:awesomium web-brower framework This view has crashed
    Java集合:Collection、List、Set、Map、泛型
  • 原文地址:https://www.cnblogs.com/xmtxh/p/12231066.html
Copyright © 2011-2022 走看看