linux下ssh和sshd-RH124学习笔记

什么是ssh?linux

Secure Shell,协议
做用:数据在网络中能够加密传输
实现:openssh
客户端:openssh-client
服务器端:openssh
端口:22

实现:dropbear

远程登陆web

telnet 
明文
客户端:telnet 
服务器端:telnet-server 
端口:23
默认状况下,禁止用root使用telnet登陆系统
生产环境中使用telnet,测试和目标主机的指定端口是否能够正常的通讯,也就是测试目标主机的指定端口是否开放(经过端口来判断服务是否处于开启状态)

进程算法

守护进程:一个服务维护一个进程,让进程工做在后台,每一个进程都有本身的服务,可用service服务名 start|stop...进行管理
超级守护进程:一个服务维护多个进程
xinetd
瞬时守护进程:由超级守护进程负责管理的子进程就是瞬时守护进程
telnet
瞬时进程没有本身的服务,他的启动和管理依赖xinetd

sshshell

telnet 
scp 
总结:ssh的功能
    一、远程登陆
    二、远程文件传输
    三、相似于ftp的文件传输功能,sftp

ssh的客户端和服务器端
    ssh安全
    ssh v1 <<废弃
        RSA
    ssh v2
        RSA DSA
    如何经过公钥来判断服务器是合法的?

ssh的配置文件windows

客户端配置文件:/etc/ssh/ssh_config
服务器端配置文件 /etc/ssh/sshd_config   
linux ssh客户端收到的公钥文件的保存位置
~/.ssh/known_hosts 
ssh服务器端的ip 加密算法  秘钥

客户端工具1-SSHcentos

客户端使用ssh两种使用方式
基于口令作登陆方式
基于秘钥作登陆方式   
基于口令的认证方式
格式
    ssh [options][user@]host [COMMAND]
    ssh [options][-l user] host [COMMAND]
说明:
    user:指定以哪一个用户的身份登陆远程主机,若是不指定user,
    则是以当前系统的用户来登陆远程主机
    command:直接在远程主机上执行命令,执行完毕后自动退出
    选项:
        -p port:指定远程主机的ssh所使用的端口,若是不指定此选项,默认链接22端口
        -t :远程执行sudo命令

客户端配置文件安全

/etc/ssh/ssh_config

基于秘钥作登陆认证(免密码登陆)bash

原理:
客户端 
    一对秘钥
        将公钥保存在服务器端的对应帐户的家目录下的隐藏文件中(.ssh)
    登陆
        服务器端就会向客户端发送质询
            服务器端会用预先保存的公钥来加密一段数据,而后将加密数据发送给客户端,若是客户端能够
            解密,则是合法用户。

linux免密码登陆实现过程
    准备linux虚拟机
        172.20.225.70 clinet
        172.20.225.71 server

第一步:在客户端生成一对秘钥
        #ssh-keygen -t rsa
        默认秘钥对的位置 /root/.ssh/id_rsa
            id_rsa         <<<秘钥文件
            id_rsa.pub     <<<公钥文件
        ls ~/.ssh/
        id_rsa  id_rsa.pub  

第二步:将公钥文件传到服务器端
    root登陆172.20.225.70,所以,这个公钥文件须要放在172.20.225.70的root用户的家目录下
    ssh-copy-id [-i identifile] [user@]host
    说明:-i 指定公钥文件的
          user@host:指定传递到那个主机的那个用户的家目录下
    工做原理:
        一、将公钥文件传递到服务器端
        二、将传递的文件更名为authorized_keys
        三、修改文件的权限为600

实现命令
    ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.20.225.71
    服务器收到客户端的公钥文件后,会自动更名为:authorized_keys

openssh客户端
    windows客户端
        xshell
        putty
        secureCRT
        ……
    linux客户端
        ssh、sftp、scp

客户端工具2-scp服务器

做用:在两个主机上互相的传递文件
格式:
    pull(拉取):scp [options] [user@]host:/pat/to/file /path/to/save
    push(推送):scp [options] /path/to/push [user@]host:/path/to/save

    选项:
        -r:递归
        -t:保留文件的属性不变(权限、时间戳)
        -q:静默模式
        -P port:指定使用的端口(默认使用22端口)

        推送例子:将本地文件/root/new1.txt推送到172.20.225.71的tmp目录下
            #scp /root/new1.txt root@172.20.225.71:/tmp/

        拉取例子:将172.20.225.71下/root/11.sh 拉取到本机/home/下
            #scp root@172.20.225.71:/root/11.sh /home

客户端工具3-sftp网络

格式:sftp IP 

ssh的服务器端的配置文件
/etc/ssh/sshd_config

#Port 22                       <<<< ssh服务所监听的端口
#ListenAddress 0.0.0.0         <<<< ssh服务所监听的地址
#PermitRootLogin yes           <<<< 是否容许root远程登陆
#MaxAuthTries 6                <<<< 指定最大尝试次数
#MaxSessions 10                <<<< 最大并行链接会话数量(同时多少个用户尝试链接服务器)
AuthorizedKeysFile  .ssh/authorized_keys   <<<<指定秘钥认证文件名称和路径
#PubkeyAuthentication yes      <<<< 是否支持秘钥认证
PasswordAuthentication yes     <<<< 是否支持口令认证
#UseDNS no                     <<<<  禁止作DNS反向解析
#ClientAliveInterval 0         <<<< 设置ssh登陆的空闲超时时间,单位是秒
    变量:TMOUT=xx 

#AllowUsers= user1 user2 ……    <<<< 设置白名单
#AllowGroups=gp1 gp2           <<<< 设置白名单
#DenyUsers= user1 user2        <<<< 设置黑名单
#DenyGroups=gp1 gp2            <<<< 设置黑名单
#PermitEmptyPasswords no       <<<< 设置是否容许空密码

日志设施
    记录日志的方式
    SyslogFacility AUTHPRIV
        AUTHPRIV意味着日志信息会记录到/var/log/secure

    ssh服务器端日志
        /var/log/secure
            这个日志须要常常看
            普通用户没有权限查看和修改

配置ssh实战
    一、配置监听的端口
    二、配置监听的地址
    三、禁止使用ssh v1
    四、设置用户白名单
    五、设置空闲超时时间
    六、结合防火墙设置ssd规则
    七、禁止使用弱密码(数字 字母 特殊符号 长度位8字符以上)
    八、尽可能使用秘钥认证
    九、禁止使用空密码登陆
    十、禁止root远程ssh
    十一、限制尝试次数与并行链接数量
    十二、将日志文件作异地备份
    1三、常常分析查看日志文件

    centos6和centos7的区别
    service sshd status
    systemctl status sshd.service

用三个虚拟机实现以下效果

一、从A主机能够直接登陆B C 两个主机
二、从A主机能够直接以远程的方式在B C 两个主机上执行命令
3:从A主机能够直接向B C 两个主机发送文件
案例:让baskup主机可使用秘钥的方式登陆web1 web2……且以普通用户身份

执行秘钥分发和文件传输等操做

一、建立普通用户(三个主机都建立)
[root@localhost ~]# useradd tuser
[root@localhost ~]# echo "123456" | passwd --stdin tuser

二、生成秘钥对
[root@localhost ~]# su - tuser
[tuser@localhost ~]$ ssh-keygen -t rsa

三、传递秘钥
[tuser@localhost ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub tuser@172.20.225.70
[tuser@localhost ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub tuser@172.20.225.71

四、登陆
[tuser@localhost ~]$ ssh root@172.20.225.70
root@172.20.225.70's password: 
免密登陆 
[tuser@localhost ~]$ ssh tuser@172.20.225.70
[tuser@client ~]$ 

总结:在进行登陆的时候,必须保证当前用户的家目录下有.ssh/id_rsa
在对方主机的指定用户的家目录下,必需要有公钥文件.ssh/authorized_keys

[tuser@localhost root]$ ssh tuser@172.20.225.70 '/sbin/ip add'
[tuser@localhost root]$ ssh tuser@172.20.225.71 '/sbin/ip add'

批量获取主机的信息
userName="tuser"
for i in 67 68 69 70 71
do
        ip="172.20.225.$i"
        if ! ping -c1 -W1 $ip &>/dev/null;then
                echo "The host $ip is not exist."
        else
                res=`ssh ${userName}@${ip} '/bin/df -h | grep sda1'`
                echo "==========================ip:$ip====================="
                echo "The disk use infomation:$res"
        fi
done

批量向主机传递文件
    让用户输入一个文件,则将文件传递到全部的主机
    若是传输成功,提示绿色成功,若是传输失败,提示红色失败,若是文件不存在,则提示无此文件。
#!/bin/bash
#author:lichao
#date:20190809
#function: use ssh to send file
#mail:chao.il@qq.com

userName="tuser"
funFile=/etc/init.d/functions
if [ ! -e $funFile ];then
    echo "Error. the funcation file not exist."
    exit 19
else
    . $funFile
fi

read -p "Please enter a file: " fileName
if [ ! -e $fileName ];then
    echo "no such file."
    echo "bye."
    exit 12
fi 

for i in 70 71
do
    ip="172.20.225.$!"
    if ping -c1 -W1 $ip &>/dev/null;then
        if scp -rq $fileName $userName@$ip:~/;then
            action "send file to $ip" /bin/true
        else
            aciton "send file to $ip" /bin/false
        fi
    else
        action "send file to $ip" /bin/false
    fi 
done

案例:将文件传递到目标主机的非家目录下
[tuser@localhost root]$ echo "test page".test.page
test page.test.page
[tuser@localhost ~]$ scp test.page tuser@172.20.225.70:/etc/
scp: /etc//test.page: Permission denied
[tuser@localhost ~]$ scp test.page tuser@172.20.225.70:~/
test.page

没有权限

分两步:
    一、将文件传递到目标主机的家目录下
    二、远程执行移动命令,将家目录下的文件移动到目标位置

    [tuser@localhost ~]$ scp test.page2 tuser@172.20.225.70:~/
    test.page2                          100%   10    10.8KB/s   00:00

    bash-4.2# ls /home/tuser/
    .bash_history  .bash_logout   .bash_profile  .bashrc        .ssh/          test.page      test.page2 
    bash-4.2# visudo
    tuser   ALL=(ALL)       NOPASSWD: /bin/mv

    [tuser@localhost ~]$ ssh -t tuser@172.20.225.70 'sudo mv ~/test.page2 /etc/'
    Connection to 172.20.225.70 closed.

    bash-4.2# ls /etc/te
    terminfo/   test.page1  test.page2

配置sshd服务

端口
    0-65535
    小于1024的端口:是由系统保留使用的
    自定义端口一般用1024以上的端口

    端口的做用:在系统当中惟一的标识一个进程
    这样就能够现实将发送给指定端口的数据转发到指定的进程中
    系统中每一个进程在启动的时候,会自动个向注册使用一个端口,当有发送到这个端口的数据的时候,
    内核会根据端口的记录转发给指定的进程。
    一个主机向另外一个主机发送数据包的时候,在数据包中已经指定了这个数据包是给多少号端口的
    做用:用来实现让客户端使用22端口来远程登陆
     配置文件:
     /etc/ssh/sshd_config       <<<<<这是服务端的配置文件
     /etc/ssh/ssh_config        <<<<<这是客户端的配置文件

     安全操做
    一、修改sshd的服务端口
    # vi /etc/ssh/sshd_config
      Port ***
     # service sshd restart

    二、解决xshell登陆缓慢的问题
        将UseDNS yes 改成 UseDNS no
        将GSSAPIAuthentication 改成  GSSAPIAuthentication no
    三、容许root用户登陆
    PermitRootLogin yes 改成no 后root用户登陆不了系统
相关文章
相关标签/搜索