• SSH


    SSH是一套网络协议,它的目的在于安全的网络服务和加密的远程登录,实现了ssh协议的最主流开源软件是openssh。

    以前使用FTP或者TELNET登录服务器,都是以明文的形式在网络中发送账号和密码,很容易被黑客截取到

    数据,篡改后威胁到服务器的安全。因此何如对数据加密,安全传输成为了重中之重。

    主要方式有两种:

      1.对称加密

      2.非对称加密

    为防止中间人攻击

    # 扫描server端指纹信息
    yumac: ~ yuchao$ssh-keyscan -t ecdsa 123.206.16.61| ssh-keygen -lf -
    # 123.206.16.61:22 SSH-2.0-OpenSSH_7.4
    256 SHA256:CVwhwfUkaLPrretR4pGltYRL6QB+5lyI 123.206.16.61 (ECDSA)
    
    进行对比
    

    基于公钥认证

    基于口令的认证存在一些缺点,每次登录都需要输入密码,当我们机器数量众多就难以维护了。

    我们更希望能够免密登录,公钥登录

    公钥登录流程如下:

      1.client发送自己的公钥给server,写入server的authorazed_keys中

      2.server端接受到client的连接请求后,在自己的authorized_keys文件中匹配client的公钥信息pubkey,并

    生成一个随机数R,使用client的公钥pubkey针对该随机数R进行加密,得到一个加密后的随机数pubkeyR。

      3. client通过私钥解密得到随机数R,再对随机数R和当前会话sessionkey采用MD5生成摘要Digest1,再发送

    给server端。

      4. server端会对随机数R和当前client的sessionkey用同样的摘要算法生成Digest2.

      5. 结果比较client发来的Digest1与Digest2是否一致,正确则完成认证。

    ssh登录原理

     

    配置ssh公钥认证

    # client本地生成公私钥
    [root@chaogelinux .ssh]# ssh-keygen -t rsa  #指定rsa密钥类型,默认一路回车
    
    #会生成如下的公私钥
    Your identification has been saved in /root/.ssh/id_rsa.
    Your public key has been saved in /root/.ssh/id_rsa.pub.
    
    #发送client公钥到server中
    #发送自己的公钥,写入到远端server的authorized_keys中
    yumac: ~ yuchao$ssh-copy-id root@123.206.16.61
    /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/Users/yuchao/.ssh/id_rsa.pub"
    /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
    /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
    root@123.206.16.61's password:
    
    Number of key(s) added:        1
    
    Now try logging into the machine, with:   "ssh 'root@123.206.16.61'"
    and check to make sure that only the key(s) you wanted were added.
    
    #直接输入登录命令即可
    yumac: ~ yuchao$ssh root@123.206.16.61   
    Last failed login: Fri Jan  3 16:54:46 CST 2020 from 189.39.13.1 on ssh:notty
    There were 3 failed login attempts since the last successful login.
    Last login: Fri Jan  3 16:14:59 2020 from 222.35.146.118
    [root@chaogelinux ~]#
    [root@chaogelinux ~]# cat ~/.ssh/authorized_keys
    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDbkHjqnRe31HCteHc0BSfovvs9GqutyBfWvAJQy51Std1Ir3qBnHs29aKjwPL/jm/xHlZWgQ8mD/Xr091j2EVwGKUSMfCfH9nwbfu+0mwfwZKseJx5uliERShCpkRzA3Bhe6KOAqL1cgpfFzwKzO2Raga1PIGiCYcM/DIDlQh75/rEk9H5FGutamGiGrrtJfL4drRg6zEknrxSDWAMB3/MH6WUmkSWmGnECxOsPSy1PJN6Kqp1B yuchao@yumac
    

      

    SSH配置文件

    [root@chaogelinux ~]# grep -Ev '^$|^[# ]' /etc/ssh/sshd_config
    Port 22    #默认端口
    AddressFamily any    #配置地址家族,any支持ipv4,ipv6
    ListenAddress 0.0.0.0 #设置sshd服务监听的ip地址,注意多网卡的绑定
    HostKey /etc/ssh/ssh_host_rsa_key  #ssh各密钥存放的位置 
    HostKey /etc/ssh/ssh_host_ecdsa_key
    HostKey /etc/ssh/ssh_host_ed25519_key
    PermitRootLogin yes  #是否允许root管理员直接登录,保证系统安全
    StrictModes yes    #当用户的私钥改变,直接拒绝连接
    MaxAuthTries 6    #最大密码尝试次数
    MaxSessions 10    #最大终端数
    AuthorizedKeysFile .ssh/authorized_keys    #信任主机的公钥文件存放地
    PasswordAuthentication yes #是否设置密码验证机制
    PermitEmptyPasswords no  #是否允许空密码登录,禁止
    

      

    SSH与服务器安全

    1. 修改SSH的端口,port 

    2. 禁止root登录,PermitRootLogin no

    3. 禁止用密码登录,只能用被信任的机器,用公私钥进行登录,PasswordAuthentication no

    # 创建一个普通的用户且支持公钥登录
    1.登录服务器,创建普通用户,设置登录密码
    useradd yuchao
    passwd yuchao
    
    2.在自己本地机器,生成一个普通用户的公私钥对
    ssh-keygen -t rsa
    3.发送公钥给服务器,配置公钥登录
    ssh-copy-id yuchao@192.168.178.142
    
    4.在正确配置了公私钥登录之后,yuchao这个用户就可以免密登录linux服务器了
    ssh yuchao@192.168.178.142
    
    # 在Linux上配置该用户支持sudo命令
    1.使用root登录服务器,配置yuchao用户支持sudo命令
    vim  /etc/sudoers文件
    添加如下行
    ## Allow root to run any commands anywhere
    root    ALL=(ALL)       ALL
    yuchao  ALL=(ALL)       ALL
    
    2.此时尝试用yuchao用户登录,是否能够使用sudo命令
    # 修改ssh的配置文件如下
    修改/etc/ssh/sshd_config 文件的如下参数,此时一个安全的ssh服务器以及配置完毕,参数如下
    
    [root@chaoge_linux ~]# grep -Ev '^$|^[# ]' /etc/ssh/sshd_config
    Port 23354
    AddressFamily any
    ListenAddress 0.0.0.0
    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
    AuthorizedKeysFile    .ssh/authorized_keys
    PasswordAuthentication no
    ChallengeResponseAuthentication no
    GSSAPIAuthentication no
    GSSAPICleanupCredentials no
    UsePAM yes
    X11Forwarding yes
    UseDNS no
    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
    
    # 重启ssh服务,此时就不能用root登录,只允许这个免密用户登录了

      当然如上配置需根据自己的工作环境配置,灵活学习,灵活使用。

    1.使用root用户重启sshd服务
    ssh root@192.168.178.142
    
    2.重启sshd服务
    systemctl restart sshd
    
    3.此时机器已经禁止root登录,禁止密码登录,且修改了ssh端口为23354
    
    4.此时只能使用配置好的yuchao用户进行免密登录了
    ssh yuchao@192.168.178.142 -p 23354
    

      

    screen 

    1. 远程会话恢复:由于网络中断,导致的会话断开,需要重新连接,screen能确保用户不会丢失对远程会话的控制

    2. 多窗口,运行多个远程会话

    3. 会话共享:多个用户同时登录到远程服务器时,可以使用会话共享功能让用户之间的数据共享

    screen常用参数

    参数 作用
    -S 创建会话窗口
    -A 所有的窗口都调整为当前终端大小
    -d 断开screen进程(得有用户时Attached状态,)
    -ls 同于-list,显示目前所有的screen
    -r 恢复离线的screen进程,可以指定多个PID,TTY,HOST
    -x

    恢复离线的screen作业

    -wipe  检查目前所有的screen作业,并删除已经无法使用的screen作业
    1.提前配置好epel仓库源
    [root@chaogelinux ~]# yum install screen -y
    
    2.直接安装
    [root@chaogelinux ~]# yum install screen -y
    
    
    1.进入一个新的screen会话,名字叫做s1
    [root@chaogelinux ~]# screen -S s1
    
    2.此时会立刻进入screen,检查会话信息
    [root@chaogelinux ~]# screen -ls
    There is a screen on:
            27686.s1        (Attached)
    1 Socket in /var/run/screen/S-root.
    
    3.想要退出screen会话,直接输入exit
    [root@chaogelinux ~]# screen -S s1
    [screen is terminating]
    
    
    
    ########################
    
    
    # 模拟突然断开远程会话
    
    1.新建一个会话,执行一个持续执行的任务
    [root@chaogelinux ~]# screen -S myPing
    
    2.执行一个ping任务
    ping baidu.com
    
    3.直接关闭窗口
    
    4.检查screen会话
    发现有个myPing是挂掉的状态
    [root@chaogelinux ~]# screen -ls
    There is a screen on:
        28570.myPing    (Detached)
    1 Socket in /var/run/screen/S-root.
    
    5.恢复会话
    [root@chaogelinux ~]# screen -r myPing
    
    6.退出会话直接exit
    
    7.还可以再次尝试用screen新建一个会话,使用vim编辑文件,然后关闭窗口
    

      

     # 会话共享

    1.小王同学创建一个screen会话,等待超哥连接
    screen -S shareScreen
    
    
    2.超哥登录服务器,查看以存在的会话信息
    [root@chaogelinux ~]# screen -ls
    
    3.超哥加入会话,且开始操作,协助小王解决问题,小王坐在电脑前默默观看
    screen -x  shareScreen
    
    4.小王默默观看超哥一顿输出,解决bug
    
    5.超哥退出screen输入ctrl + a + d 组合键,留下小王满意的笑容
    ctrl + a + d #超哥退出screen
    
    6.小王退出screen,正常操作linux
    exit
    

      

     

     

  • 相关阅读:
    python学习之计算机基础详解
    python学习笔记-day03
    名称空间与作用域
    函数参数的应用
    day14
    day13
    函数的基本使用
    day12
    day 09
    文件操作
  • 原文地址:https://www.cnblogs.com/abc1234567/p/14141389.html
Copyright © 2020-2023  润新知