ssh远程管理服务
一.ssh简介
SSH是一个安全协议,在进行数据传输时,会对数据包进行加密处理,加密后在进行数据传输。确保了数据传输安全。
那SSH服务主要功能有哪些呢?
1.提供远程连接服务器的服务
1)linux远程连接协议: ssh服务 端口22
2)windows远程连接: RDP协议 端口3389
2.对传输的数据进行加密
二.ssh和telnet的区别
telnet:
1.不支持root用户登录,只允许普通用户登录
2.数据传输过程中明文的
ssh:
1.支持root用户登录
2.数据传输过程中时加密码
三.ssh相关命令
1.ssh root@172.16.1.31
命令拆分
ssh #命令
root #连接远端服务器时使用的用户,远端服务器上真实存在的用户
#如果连接时不指定用户,则使用当前服务器的当前用户连接的远端服务器上的相同用户
@ #分割符
172.16.1.31 #远端服务器的IP地址
-p #指定ssh服务端的端口
22 #ssh的端口
-o StrictHostKeyChecking=no #首次连接不询问
2.xshell连接不上服务器怎么办?
1.查看网络
ping 10.0.0.31
2.查网卡,网卡是否启动
3.查端口
telnet 10.0.0.31 22
4.检查sshd服务是否启动
5.防火墙
6.虚拟机的虚拟网络编辑器
7.查看windows的网卡
3.scp命令
类似于rsync命令,远程拷贝,scp时全量,rsync时增量scp 也支持推和拉
1.推和拉
1).与rsync不同,推送时不论加 / 或者不加,推送的都是目录
2).如果想推送目录下的文件加 *
2.常用参数
-P 指定端口,默认22端口可不写
-r 表示递归拷贝目录
-p 表示在拷贝文件前后保持文件或目录属性不变
-l 限制传输使用带宽(默认kb)
3.总结
1).scp通过ssh协议加密方式进行文件或目录拷贝。
2).scp连接时的用户作为为拷贝文件或目录的权限。
3).scp支持数据推送和拉取,每次都是全量拷贝,效率较低。
4.sftp命令
终端连接:sftp后接IP
sftp root@10.0.0.61
sftp -oPort=52113 root@10.0.0.61 #sftp的特殊端口连接
下载文件:
sftp使用get下载文件至于本地服务器
sftp> get conf.txt /tmp/
上传文件:
sftp使用put上传本地服务器文件至远程服务器
sftp> put /root/t1.txt /root/
命令区别
1.sz/rz
1)不能上传大于4G的文件
2)不能断点续传
3)不能上传文件夹
2.sftp
1)能上传大于4G的文件
2)支持断点续传
3)可以上传文件夹
四.ssh验证方式
1.基于账号密码远程登录
#设置密码
1.如果太难,会记不住
2.如果太简单,容易破解
3.每台服务器密码不一样
4.密码是动态的
5.密码三个月一修改
6.密码错误三次锁定用户
7.密码是没有规律的
ssh root@ip -p 22
指定服务器的IP地址,端口,系统用户,密码即可通过ssh客户端命令登录远程主机
2.基于密钥远程登录
生成密钥对:ssh-keygen
推送公钥:ssh-copy-id -i root@ip
输入远程主机密码
五.ssh免密场景
1.powershell免密连接跳板机
1.打开powershell
2.执行ssh-keygen
3.windows下找到公钥 C:\Users\Administrator.DESKTOP-7PQVV6E.ssh\id_rsa.pub
4.将公钥内容复制到 m01 跳板机上
[root@m01 ~]# vim .ssh/authorized_keys
[root@m01 ~]# chmod 600 .ssh/authorized_keys
2.xshell免密登录跳板机
1.打开xshell,工具栏中的工具,点击新建用户密钥
2.选择加密文件类型和位数,下一步
3.生成密钥对成功,下一步
4.给密钥配置信息,名字,密码…,完成
5.密钥属性或者工具栏用户密钥管理者
6.选择密钥对,点击属性,查看公钥
7.将公钥内容复制到 m01 跳板机上
[root@m01 ~]# vim .ssh/authorized_keys
[root@m01 ~]# chmod 600 .ssh/authorized_keys
8.连接时使用密钥连接
3.巡检脚本
#通过跳板机获取所有机器的load,CPU,Memory等信息
[root@m01 ~]# cat all.sh
#!/usr/bin/bash
for i in 31 41
do
echo "######172.16.1.KaTeX parse error: Expected 'EOF', got '#' at position 2: i#̲####" ssh root@…i “$1”
done
4.跳板机脚本
[root@m01 ~]# cat jump.sh
#!/bin/bash
#jumpserver
lb01=10.0.0.5
lb02=10.0.0.6
web01=10.0.0.7
web02=10.0.0.8
web03=10.0.0.9
nfs=10.0.0.31
backup=10.0.0.41
db01=10.0.0.51
m01=10.0.0.61
zabbix=10.0.0.71
menu(){
cat <<-EOF
±------------------------+
| 1) lb01 |
| 2) lb02 |
| 3) web01 |
| 4) web02 |
| 5) web03 |
| 6) nfs || 7) backup |
| 8) db01 |
| 9) m01 |
| 10) zabbix |
| h) help |
±------------------------+
EOF
}
#菜单函数
menu
#连接函数
connect(){
ping -c 1 -w 1 $1 &>/dev/null
if [ $? -eq 0 ];then
ssh root@$1
else
echo -e “\033[5;4;40;31m 别连了,我的哥,$2:$1机器都没开!!!\033[0m”
fi
}
#控制不让输入ctrl+c,z
trap “” HUP INT TSTP
while true
do
read -p “请输入要连接的主机编号:” num
case $num in
1|lb01)
connect $lb01 lb01
;;
2|lb02)
connect $lb02 lb02
;;
3|web01)
connect $web01 web01
;;
4|web02)
connect $web02 web02
;;
5|web03)
connect $web03 web03
;;
6|nfs)
connect $nfs nfs
;;
7|backup)
connect $backup backup
;;
8|db01)
connect $db01 db01
;;
9|m01)
connect $m01 m01
;;
10|zabbix)
connect $zabbix zabbix
;;
h|help)
clear
menu
;;
求求你放过我)
break
;;
esac
done
六.ssh安全优化
1.优化内容
#SSH作为远程连接服务,通常我们需要考虑到该服务的安全,所以需要对该服务进行安全方面的配置。
1.更改远程连接登陆的端口
2.禁止ROOT管理员直接登录
3.密码认证方式改为密钥认证
4.重要服务不使用公网IP地址
5.使用防火墙限制来源IP地址
2.优化的配置
[root@m01 ~]# vim /etc/ssh/sshd_config
#修改ssh服务的端口
Port 1748
#禁止使用root登录服务器
PermitRootLogin no
#禁止使用密码登录服务器
PasswordAuthentication no
UseDNS no # 禁止ssh进行dns反向解析,影响ssh连接效率参数
GSSAPIAuthentication no # 禁止GSS认证,减少连接时产生的延迟
七、扩展
1.免交互expect
1)安装expect
[root@m01 ~]# yum install -y expect2)编写expect脚本
[root@m01 ~]# vim xuanjian.exp
#!/usr/bin/expect
set ip 10.0.0.51
set pass 123456
set timeout 30
spawn ssh root@KaTeX parse error: Can't use function '\r' in math mode at position 34: …no)" {send "yes\̲r̲"; exp_continue…pass\r"}
}
expect “root@" {send “df -h\r”}
expect "root@” {send “exit\r”}
expect eof
2.免交互sshpass
1)安装sshpass
[root@m01 ~]# yum install -y sshpass
2)使用sshpass命令
[root@m01 ~]# sshpass -p 123456 ssh root@10.0.0.51
[option]
-p:指定密码
-f:从文件中取密码
-e:从环境变量中取密码
-P:设置密码提示