Day 44 SSHD

1.1 SSH基本概述

SSHSecure Shell Protocol的简写,在进行数据传输之前,SSH先对联机数据包通过加密技术进行加密处理,加密后在进行数据传输。确保了传递的数据安全。

1.1.1 SSH远程服务主要功能

    1.提供远程连接服务器的服务

    2.对传输的数据进行加密

ssh是一个加密的远程传输协议。(进入了密封的隧道)

telnet是一个远程传输协议。(明文的传输)

1.1.2 远程连接方式有哪些

    ssh属于密文连接方式     监听在本地22/tcp端口(LinuxUnixubuntu、)

    telnet属于明文连接方式  监听在本地23/tcp端口(路由器、交换机、防火墙)

1.1.3 SSH远程连接与Telnet远程连接区别

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

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

1.1.4 安装telnet服务,然后使用root登录测试

[root@web01 ~]# yum install telnet-server -y

[root@web01 ~]# systemctl start telnet.socket

1.1.5 使用xshell的新建标签,输入如下指令[登录不上]

[e:\~]$ telnet 10.0.0.7

Kernel 3.10.0-862.el7.x86_64 on an x86_64

web01 login: root

Password:

Login incorrect

1.1.6 创建一个普通用户,再次使用telnet登录测试

[root@web01 ~]# useradd od

[root@web01 ~]# echo "1" | passwd --stdin od

 

[e:\~]$ telnet 10.0.0.7

web01 login: od

Password:

Last login: Mon Sep 10 09:57:39 from ::ffff:10.0.0.1

[od@web01 ~]$

 

1.1.7 SSH远程连接不上,怎么办

    服务端

        22端口是否打开(telnetnmap检测)

        防火墙是否允许能连接22端口

    客户端

        1.ping 127.0.0.1 检测TCP/IP协议栈(检查网卡是否故障)

        2.ping 172.16.1.31 排查是否是交换机故障

        3.ping 网关地址 数据包是否能抵达路由器

        4.ping 域名   检查DNS是否异常

1.2  SSH相关命令

    SSH服务使一个C/S架构,有服务端,就有客户端

    Windows客户端(XshellCRT

    Linux客户端(ssh命令)

[root@backup ~]# yum provides `which ssh`

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

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

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

 

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

/usr/bin/scp            --- 远程拷贝命令

/usr/bin/sftp           --- 远程文件传输命令

/usr/bin/ssh            --- 远程连接登录命令

/usr/bin/ssh-copy-id    --- 远程分发公钥命令

 

1.2.1    SCP远程拷贝 -l限速

    仅支持全量拷贝,覆盖式,效率低,基于ssh协议传输的数据(安全)

    [root@nfs ~]# scp -rp nfs-file root@172.16.1.7:/tmp

    [root@nfs ~]# scp -rp  root@172.16.1.7:/tmp/yum.log  /tmp/

   

sftp-->XFTP

    1.支持批量上传文件

    2.支持单个文件超过4G

    3.支持断点续传

   

1.2.2   ssh远程登录服务器命令

    ssh -p22 oldboy@10.0.0.150 [命令]

    # SSH连接远程主机命令的基本语法;

    # ssh 命令

    # -p(小写), 用于指定远程主机端口,默认22端口可省略

    # oldboy@remotehost

    # "@"前面为用户名,如果用当前用户连接,可以不指定用户

    # "@"后面为要连接的服务器的IP

 

1.2.3   scp复制数据至远程主机命令(全量复制)

    # SSH连接远程主机命令的基本语法;

    # scp 命令

    # -P(大写) 指定端口,默认22端口可不写

    # -r 表示递归拷贝目录

    # -p 表示在拷贝文件前后保持文件或目录属性不变

    # -l 限制传输使用带宽(默认kb)

   

    推:PUSH,上传

    # scp -P22 -rp /tmp/oldboy oldboy@10.0.0.150:/tmp

    # /tmp/oldboy为本地的目录。

    # “@”前为用户名

    # “@”后为要连接的服务器的IP。

    # IP后的:/tmp目录,为远端的目标目录。

    # 说明: 以上命令作用是把本地/tmp/oldboy推送至远端服务器10.0.0.150的/tmp目录

 

    拉:PULL,下载

    # scp -P22 -rp root@10.0.0.7:/tmp/oldboy /opt/

    # 还可以将远端目录或文件拉取至本地

结论:

1.scp通过加密进行远程拷贝文件或目录的命令。

2.scp拷贝权限为连接的用户对应的权限。

3.scp支持数据的推送和拉取,但每次都是全量拷贝,效率低下。

 

1.3  SSH连接方式*****

    1.账户和密码

        不方便

        容易被×××

    2.秘钥的登录方式

1.3.1 ##你需要登录哪台服务器,就将自己的公钥推送至对应的服务器即可

    1.创建密钥对

    [root@m01 ~]# ssh-keygen -t rsa -C xuliangwei.com   #一路回车即可

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

    id_rsa(钥匙)  id_rsa.pub(锁头)

    2.发送密钥给需要登录的服务器即可

    [root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.31

   

1.3.2   Manager能通过密钥的方式连接  nfsbackup以及web

//命令示例: ssh-copy-id [-i [identity_file]] [user@]machine

ssh-copy-id //命令

-i          //指定下发公钥的路径

[user@]     //以什么用户身份进行公钥分发(root,如果不输入,表示以当前系统用户身份分发公钥

machine     //下发公钥至那台服务器, 填写远程主机IP地址   

   

1.3.3 1.Linux实现秘钥管理

    ssh-keygen

1.3.4 2.Window实现秘钥登录服务器

    1.Xshell工具->新建密钥生成工具->猛击下一步

    2.连接服务器,在当前用户的家目录创建.ssh目录(权限700

    3..ssh目录新建authorized_keys,权限是600

    4.找到xshell里面工具-》用户秘钥管理者-》选中对应的秘钥-》属性-》公钥-》复制

    5.将复制好的公钥粘贴至  ~/.ssh/authorized_keys ,保存,然后测试

   

1.4 SSH访问控制

    变更端口

    不使用公网IP

    禁止root登录

禁止使用密码登录

1.4.1 SSH远程服务访问控制手段

    1.更改SSH服务远程登录端口(一般)

    2.更改SSH服务监听本地内网IP(不重要)

    3.更改SSH服务禁止ROOT管理员登录(重要)

    4.更改SSH服务密码登录认证为密钥登录(重要)

    5.重要服务器都不使用公网IP地址(重要)

    6.使用防火墙限制来源IP地址(一般)

 

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

Port 6666                   # 变更SSH服务远程连接端口

ListenAddress 10.0.0.61     # 绑定本地内网地址

PermitRootLogin             # 是否允许root用户远程登录

PasswordAuthentication      # 是否允许使用密码登录

UseDNS                      # 是否进行dns反向解析,影响ssh连接效率参数

GSSAPIAuthentication        # 是否进行认证,影响ssh连接效率参数

 

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

###SSH###

Port 6666

ListenAddress 10.0.0.61

PasswordAuthentication no

#PermitRootLogin no

GSSAPIAuthentication no

UseDNS no

###END###

[root@m01 ~]# sytemctl restart sshd

 

测试

[root@backup ~]# ssh 'root@172.16.1.61'

ssh: connect to host 172.16.1.61 port 22: Connection refused  

[root@backup ~]# ssh 'root@172.16.1.61' -p6666

ssh: connect to host 172.16.1.61 port 6666: Connection refused  

远程控制卡dell idrac

1.5 SSH练习案例

1.5.1 使用root用户完成一把钥匙开多把锁A钥匙,BC

//1.创建公钥和私钥(A)

[root@manager ~]# ssh-keygen

//分发A公钥至(BC)

[root@manager ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.31

[root@manager ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.41

1.5.2 在不破坏题1的前提下,完成多把钥匙开一把锁BC钥匙,A

#1.先生成密钥对,分别在NFSBackup上执行(-P指定密码 -f指定存放的位置)

[root@backup ~]# ssh-keygen -P "" -f ~/.ssh/id_rsa

[root@nfs ~]# ssh-keygen -P "" -f ~/.ssh/id_rsa

 

#2.推送nfsbackup的公钥至Manager(执行如下指令即可)

ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.61

 

//1.生成公钥和私钥(B)

[root@nfs01 ~]# ssh-keygen

//2.B下发公钥给A

[root@nfs01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub  root@172.16.1.61

 

//3.生成公钥和私钥(C)

[root@nfs01 ~]# ssh-keygen

//4.C下发公钥给A

[root@backup ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.61

1.5.3 如何实现从A指定目录或文件分发到BC服务器

##正常推送文件

[root@m01 ~]# scp file root@172.16.1.31:/root

file                                            100%    0     0.0KB/s   00:00   

[root@m01 ~]# scp file root@172.16.1.41:/root

file                                            100%    0     0.0KB/s   00:00   

###不跟任何参数无法推送目录

[root@m01 ~]# mkdir dir

[root@m01 ~]# scp dir root@172.16.1.41:/root

dir: not a regular file

##加参数后

[root@m01 ~]# scp -rp dir root@172.16.1.41:/root

[root@m01 ~]# mv file dir

[root@m01 ~]# scp -rp dir root@172.16.1.41:/root

file                                              100%    0     0.0KB/s   00:00  

 

[root@manager ~]# scp manager-web root@172.16.1.31:/tmp

manager-web                 100%    0     0.0KB/s   00:00   

[root@manager ~]# scp manager-web root@172.16.1.41:/tmp

manager-web                 100%    0     0.0KB/s   00:00 

1.5.4 如何快速查看所有机器的loadCPUMemory等信息(思考:如果服务器数量多,如何并发查看和分发数据)

[root@manager ~]# cat test.sh

#!/usr/bin/bash

[ $# -ne 1 ] && echo "请输入执行的命令" && exit 1

 

for i in 31 41

do

    echo "#########172.16.1.$i#####"

    ssh root@172.16.1.$i "$1"

done