千家信息网

ssh和sshd服务端的介绍和使用方法

发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,什么是ssh?SSH是Secure Shel 的缩写,由IETF的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH是比较可靠,专为远程登录会
千家信息网最后更新 2024年11月11日ssh和sshd服务端的介绍和使用方法

什么是ssh?

SSH是Secure Shel 的缩写,由IETF的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH是比较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。

Secure Shell,协议作用:数据在网络中可以加密传输实现:openssh客户端:openssh-client服务器端:openssh端口:22
实现:dropbear
telnet 明文客户端:telnet 服务器端:telnet-server 端口:23默认情况下,禁止用root使用telnet登录系统生产环境中使用telnet,测试和目标主机的指定端口是否可以正常的通信,也就是测试目标主机的指定端口是否开放(通过端口来判断服务是否处于开启状态)

进程

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

ssh

telnet scp 总结:ssh的功能    1、远程登录    2、远程文件传输    3、类似于ftp的文件传输功能,sftpssh的客户端和服务器端    ssh安全    ssh v1 <<废弃        RSA    ssh v2        RSA DSA    如何通过公钥来判断服务器是合法的?

ssh的配置文件

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

客户端工具1-SSH

客户端使用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

基于秘钥做登录认证(免密码登录)

原理:客户端     一对秘钥        将公钥保存在服务器端的对应账户的家目录下的隐藏文件中(.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:指定传递到那个主机的那个用户的家目录下    工作原理:        1、将公钥文件传递到服务器端        2、将传递的文件改名为authorized_keys        3、修改文件的权限为600实现命令    ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.20.225.71    服务器收到客户端的公钥文件后,会自动改名为:authorized_keysopenssh客户端    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实战    1、配置监听的端口    2、配置监听的地址    3、禁止使用ssh v1    4、设置用户白名单    5、设置空闲超时时间    6、结合防火墙设置ssd规则    7、禁止使用弱密码(数字 字母 特殊符号 长度位8字符以上)    8、尽量使用秘钥认证    9、禁止使用空密码登录    10、禁止root远程ssh    11、限制尝试次数与并行连接数量    12、将日志文件做异地备份    13、经常分析查看日志文件    centos6和centos7的区别    service sshd status    systemctl status sshd.service

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

1、从A主机可以直接登录B C 两个主机2、从A主机可以直接以远程的方式在B C 两个主机上执行命令3:从A主机可以直接向B C 两个主机发送文件案例:让baskup主机可以使用秘钥的方式登录web1 web2……且以普通用户身份执行秘钥分发和文件传输等操作1、创建普通用户(三个主机都创建)[root@localhost ~]# useradd tuser[root@localhost ~]# echo "123456" | passwd --stdin tuser2、生成秘钥对[root@localhost ~]# su - tuser[tuser@localhost ~]$ ssh-keygen -t rsa3、传递秘钥[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.714、登录[tuser@localhost ~]$ ssh root@172.20.225.70root@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 71do        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"        fidone批量向主机传递文件    让用户输入一个文件,则将文件传递到所有的主机    如果传输成功,提示绿色成功,如果传输失败,提示红色失败,如果文件不存在,则提示无此文件。#!/bin/bash#author:lichao#date:20190809#function: use ssh to send file#mail:chao.il@qq.comuserName="tuser"funFile=/etc/init.d/functionsif [ ! -e $funFile ];then    echo "Error. the funcation file not exist."    exit 19else    . $funFilefiread -p "Please enter a file: " fileNameif [ ! -e $fileName ];then    echo "no such file."    echo "bye."    exit 12fi for i in 70 71do    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.pagetest 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没有权限分两步:    1、将文件传递到目标主机的家目录下    2、远程执行移动命令,将家目录下的文件移动到目标位置    [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        <<<<<这是客户端的配置文件     安全操作    1、修改sshd的服务端口    # vi /etc/ssh/sshd_config      Port ***     # service sshd restart    2、解决xshell登录缓慢的问题        将UseDNS yes 改为 UseDNS no        将GSSAPIAuthentication 改为  GSSAPIAuthentication no    3、允许root用户登录    PermitRootLogin yes 改为no 后root用户登录不了系统
0