Day 44 SSHD
1.1 SSH基本概述
SSH是Secure Shell Protocol的简写,在进行数据传输之前,SSH先对联机数据包通过加密技术进行加密处理,加密后在进行数据传输。确保了传递的数据安全。
1.1.1 SSH远程服务主要功能
1.提供远程连接服务器的服务
2.对传输的数据进行加密
ssh是一个加密的远程传输协议。(进入了密封的隧道)
telnet是一个远程传输协议。(明文的传输)
1.1.2 远程连接方式有哪些
ssh属于密文连接方式 监听在本地22/tcp端口(Linux、Unix、ubuntu、)
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端口是否打开(telnet、nmap检测)
防火墙是否允许能连接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客户端(Xshell、CRT)
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能通过密钥的方式连接 nfs和backup以及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.先生成密钥对,分别在NFS和Backup上执行(-P指定密码 -f指定存放的位置)
[root@backup ~]# ssh-keygen -P "" -f ~/.ssh/id_rsa
[root@nfs ~]# ssh-keygen -P "" -f ~/.ssh/id_rsa
#2.推送nfs和backup的公钥至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 如何快速查看所有机器的load,CPU,Memory等信息(思考:如果服务器数量多,如何并发查看和分发数据)
[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
转载于:https://blog.51cto.com/13859649/2173821