SSH远程管理服务
一、SSH简介
**SSH是一个安全协议,在进行数据传输时,会对数据包进行加密处理,加密后在进行数据传输。确保了数据传输安全。**那SSH服务主要功能有哪些呢?
1.提供远程连接服务器的服务
1)Linux远程连接协议:ssh服务 端口22
2)Windows远程连接:RDP协议 端口3389
2.对传输的数据进行加密
各个服务的对应的端口号,或者对应的服务如下图
二、SSH相关命令
SSH有客户端与服务端,我们将这种模式称为C/S架构,ssh客户端支持Windows、Linux、Mac等平台。在ssh客户端中包含 ssh|slogin远程登陆、scp远程拷贝、sftp文件传输、ssh-copy-id秘钥分发等应用程序。
1.ssh命令
[root@web01 ~]# ssh root@172.16.1.31
命令拆分:
ssh #命令
root #连接远端时真实存在的用户
#如果连接时不写用户,就会连接服务器的当前用户
@ #分隔符
172.16.1.31 #远端服务器的地址
-p #指定ssh服务端的端口
22 #ssh的默认端口
-o StrictHostKeyChecking=no #首次连接不询问连接
补充:xshell连接不上服务器怎么办?
1.首先确认网络是否能ping通
2.查看网卡是否启动
3.查端口,用telnet检查
4.检查ssh服务是否启动
5.查看防火墙
6.虚拟机的虚拟网络编辑器,查看配置是否正确
7.查看window的网卡
2.scp命令
类似于rsync命令,远程拷贝,scp是全量复制,rsync是增量复制
scp也支持推和拉
1)参数
-P 指定端口,默认22端口可不写
-r 表示递归拷贝目录
-p 表示在拷贝文件前后保持文件或目录属性不变
-l 限制传输使用带宽(默认kb)
2)scp推
#推送文件到远程目录
[root@web02 ~]# scp rewriteip.sh root@172.16.1.31:/tmp/
root@172.16.1.31’s password:
rewriteip.sh 100% 195 4.4KB/s 00:00
命令拆分:
scp #命令
rewriteip.sh #文件
root #用户,不填默认以远程主机的当前用户
@ #分隔符
172.16.1.31 #远程主机ip地址
:/tmp/ #远程主机保存文件的位置
#注意:
1.与rsync不同,推送目录时不论加/或者不加,推送的都是目录
2.如果想推送目录下的文件加*
3)scp拉
[root@web02 ~]# scp root@172.16.1.31:/tmp/rewriteip.sh /tmp/
root@172.16.1.31’s password:
rewriteip.sh 100% 195 102.9KB/s 00:00
#注意:
1.与rsync不同,推送目录时不论加/或者不加,推送的都是目录
2.如果想推送目录下的文件加*
4)命令示例:
#推:将本地/tmp/oldboy推送至远端服务器10.0.0.61的/tmp目录,使用对端的root用户
[root@m01 ~]# scp -P22 -rp /tmp/oldboy oldboy@10.0.0.61:/tmp
#拉:将远程10.0.0.61服务器/tmp/oldboy文件拉取到本地/opt/目录下
[root@m01 ~]# scp -P22 -rp root@10.0.0.61:/tmp/oldboy /opt/
#限速
[root@m01 ~]# scp /opt/1.txt root@172.16.1.31:/tmp
root@172.16.1.31 password:
test 100% 656MB ‘83.9MB/s’ 00:07
#限速为8096kb,换算为MB,要除以 8096/8=1024KB=1MB
[root@m01 ~]# scp -rp -l 8096 /opt/1.txt root@172.16.1.31:/tmp
root@172.16.1.31s password:
test 7% 48MB ‘1.0MB/s’ 09:45
3.sftp 命令(了解即可)
1)终端连接
[c:\~]$ sftp 192.168.1.31
#下载文件
sftp:/data> get 2_nfs.jpg
Fetching /data/2_nfs.jpg
sftp:received 29.7kb in 0.03 seconds
#上传文件
sftp:/data> put
#选择文件
2)服务器之间的连接
1.连接
[root@web01 ~]# sftp 172.16.1.31
root@172.16.1.31’s password:
Connected to 172.16.1.31.
sftp>
2.操作远程主机
sftp> pwd
Remote working directory: /root
sftp> cd /data
sftp> pwd
Remote working directory: /data
sftp> ll
Invalid command.
sftp> ls
123.txt
sftp> ls -l
-rw-r–r-- 1 nfsnobody nfsnobody 0 Mar 29 11:34 123.txt
3.操作本机(在命令前面加一个1,表示localhost)
sftp> lls -l
total 152
-rw-------. 1 root root 1755 Mar 4 18:56 anaconda-ks.cfg
-rw-r–r-- 1 root root 426 Mar 26 19:26 client.sh
-rw-r–r-- 1 root root 136588 Mar 25 16:58 etc.tar.gz
-rw-r–r-- 1 root root 1437 Mar 29 20:59 jingdong.sh
-rw-r–r-- 1 root root 195 Mar 23 16:18 rewriteip.sh
4.拉取命令
get 文件名
#指定目录拉取
get 文件名 目录名
5.推送
put
6.文件传输工具
1.xftp
2.filezilla
3.flashfxp
7.sz、rz命令与sftp对比
sz、rz:
1)不能上传大于4个G的文件
2)不能断点续传
3)不能上传文件夹
sftp:
1)能上传大于4G的文件
2)支持断点续传
3)可以上传文件夹
ssh验证方式
1.基于账户密码远程登录
知道服务器的IP地址、端口、账号密码即可通过ssh客户端命令登陆远程主机。
#设置密码
1.如果太难,会记不住
2.如果太简单,容易破解
3每台服务器密码不一样
4.密码是动态的
5.密码三个月一改
6.密码错误三次锁定用户
7.密码没有规律
2.基于秘钥的远程登录
默认情况下,通过ssh客户端命令登陆远程服务器,需要提供远程系统上的帐号与密码,但为了降低密码泄露的机率和提高登陆的方便性,建议使用密钥验证方式。
原理:
1)生成密钥对
[root@m01 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:vy4Z1ItRlNuuVJzdDV7ZM0hnTjpGrFZBrvM/pVILsrY root@m01
The key’s randomart image is:
±–[RSA 2048]----+
| …+=o+o|
| o o+B+o|
| o +oO =+|
| o ooB + o|
| .So.* |
| o.+ = . .|
| +.+ + o.|
| o +… +. |
| +E. . …|
±—[SHA256]-----+
2)将公钥发送给要免密的服务器
、
1>手动复制公钥
1.查看公钥
[root@m01 ~]# cat .ssh/id_rsa.pub
2.在其他服务器上创建文件,将内容粘贴进去
[root@nfs ~]# mkdir .ssh
[root@nfs ~]# vim .ssh/authorized_keys
3.授权文件
[root@nfs ~]# chmod 700 .ssh
[root@nfs ~]# chmod 600 .ssh/authorized_keys
4.测试连接
#首次连接需要记录服务器信息到.ssh/known_hosts
[root@m01 ~]# ssh 192.168.1.31
The authenticity of host ‘192.168.1.31 (192.168.1.31)’ can’t be established.
ECDSA key fingerprint is SHA256:KjZp/zxqS35aUrDtKvhXlYyWcZwZvH/HP1nSfG61uPM.
ECDSA key fingerprint is MD5:41:33:87:9d:3e:a4:55:d2:e0:23:90:2f:10:e7:0a:a3.
Are you sure you want to continue connecting (yes/no)? yes
There was 1 failed login attempt since the last successful login.
Last login: Tue Mar 30 08:46:27 2021 from 192.168.1.1
2>使用命令推送公钥
#推送公钥到172.16.1.7
[root@m01 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@172.16.1.7
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: ".ssh/id_rsa.pub"
The authenticity of host '172.16.1.7 (172.16.1.7)' can't be established.
ECDSA key fingerprint is SHA256:KjZp/zxqS35aUrDtKvhXlYyWcZwZvH/HP1nSfG61uPM.
ECDSA key fingerprint is MD5:41:33:87:9d:3e:a4:55:d2:e0:23:90:2f:10:e7:0a:a3.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@172.16.1.7's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@172.16.1.7'"
and check to make sure that only the key(s) you wanted were added.
[root@m01 ~]# ssh 172.16.1.7
Last login: Tue Mar 30 08:46:06 2021 from 192.168.1.1
拓展:若遇到以下问题:
PS C:\Users\qs> ssh root@10.11.12.2
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:RamM+z+P0ZkUkk9MMzizQJy8uAgLOgq1LS35ZBBJtHg.
Please contact your system administrator.
Add correct host key in C:\\Users\\qs/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in C:\\Users\\qs/.ssh/known_hosts:7
ECDSA host key for 10.11.12.2 has changed and you have requested strict checking.
Host key verification failed.
所以现在执行
ssh-keygen -R yourip
ssh免密场景
实践场景,用户通过Windows/MAC/Linux客户端连接跳板机免密码登录,跳板机连接后端无外网的Linux主机实现免密登录,架构图如下。
实践多用户登陆一台服务器无密码
实践单用户登陆多台服务器免密码
1.powershell免密连接跳板机(Windows)
1.打开powershell
2.执行ssh-keygen
3.windows下找到公钥文件:…ssh\id_rsa_pub(…代表的是目录,大家目录可能不一样)
4.将公钥内容复制到m01跳板机上
[root@nfs ~]# vim .ssh/authorized_keys
[root@nfs ~]# chmod 600 .ssh/authorized_keys
2.xshell免密登录跳板机(Linux)
1.打开xshell、找到工具栏里的工具,点击新建用户密钥
2.选择加密文件类型和位数,下一步
3.生成密钥对成功,下一步
4.给密钥配置信息,名字,密码…完成
5.密钥属性或者工具栏,用户密钥管理者
6.选择密钥对,点击属性,查看公钥
7.将公钥内容复制到m01跳板机上
[root@m01 ~]# vim .ssh/authorized_keys
[root@m01 ~]# chmod 600 .ssh/authorized_keys
8.连接时使用密钥连接
3.Mac直接连接即可
巡检脚本
#通过跳板机获取所有机器的load,CPU,Memory等信息(思考:如果服务器数量多,如何并发查看和分发数据)
[root@m01 ~]# cat xunjian.sh
#!/usr/bin/bash
for i in 7 31
do
echo "#########172.16.1.$i#####"
ssh root@172.16.1.$i "$1"
done
跳板机脚本
[root@m01 ~]# vim jump.sh
#!/bin/bash
#jumpserver
lb01=192.168.1.5
lb02=192.168.1.6
web01=192.168.1.7
web02=192.168.1.8
web03=192.168.1.9
nfs=192.168.1.31
backup=192.168.1.100
db01=192.168.1.51
m01=192.168.1.61
zabbix=192.168.1.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
;;
close)
break
;;
esac
done
ssh安全优化
1.优化内容
#SSH作为远程连接服务,通常我们需要考虑到该服务的安全,所以需要对该服务进行安全方面的配置。
1.更改远程连接登陆的端口
2.禁止ROOT管理员直接登录
3.密码认证方式改为密钥认证
4.重要服务不使用公网IP地址
5.使用防火墙限制来源IP地址(这里不调整,以后会说)
2.SSH服务登录防护需进行如下配置调整,vim /etc/ssh/sshd_config,找到下面的选项一一修改即可
Port 6666 # 变更SSH服务远程连接端口
PermitRootLogin no # 禁止root用户直接远程登录
PasswordAuthentication no # 禁止使用密码直接远程登录
UseDNS no # 禁止ssh进行dns反向解析,影响ssh连接效率参数
GSSAPIAuthentication no # 禁止GSS认证,减少连接时产生的延迟
免交互expect[扩展]
1.安装expect
[root@m01 ~]# yum install -y expect
2.编写expect脚本
#!/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 42: …no)" {send "yes\̲r̲"; exp_continue…pass\r"}
}
expect “root@" {send “df -h\r”}
expect "root@” {send “exit\r”}
expect eof
免交互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:设置密码提示