SSH远程管理服务
SSH远程管理服务
SSH是一个安全协议,在进行数据传输时,会对数据包进行加密处理,加密后再进行数据传输。确保了数据传输安全。那SSH服务主要功能有哪些呢?
1.提供远程连接服务器的服务
linux远程连接协议:ssh 22 telnet 23
windows远程连接协议:RDP(remote desktop)3389
2.对传输进行加密
面试题:请说明下列服务都是那些端口?
ssh 22
telnet 23
http 80
https 443
ftp 20 21
RDP 3389
mysql 3306
dns 53
zabbix 10051 10050
elasticsearch 9200 9300
pop3 110
rpcbind 111
rsync 873
redis 6379
ssh和telnet
1.使用telnet连接服务器
#1.安装telnet
[root@nfs ~]# yum install -y telnet-server
#2.启动telnet
[root@nfs ~]# systemctl start telnet.socket
#3.创建普通用户
[root@nfs ~]# useradd lhd
[root@nfs ~]# echo 123 | passwd --stdin lhd
#4.验证登录
[d:\~]$ telnet 10.0.0.31 23
Connecting to 10.0.0.31:23...
Connection established.
To escape to local shell, press Ctrl+Alt+].
Kernel 3.10.0-957.el7.x86_64 on an x86_64
nfs login: lhd
Password:
Last login: Tue Feb 18 09:56:30 from ::ffff:10.0.0.1
[lhd@nfs ~]$
2.ssh和telnet区别
telnet:
1.不支持root直接登录,只能用普通用户
2.数据传递是明文的
ssh:
1.支持root直接登录
2.所有数据传递都是加密的
SSH相关命令
SSH有客户端与服务端,我们将这种模式称为C|S架构,ssh客户端支持Windows、Linux、Mac等平
台。在ssh客端中包含 ssh|slogin远程登陆、scp远程拷贝、sftp文件传输、ssh-copy-id秘钥分发等应用程序。
1.ssh
[root@web01 ~]# ssh -p 22 root@10.0.0.31
ssh #命令
-p #指定端口(在终端无法使用)
22 #指定ssh协议端口
root #连接时使用的用户(如果不写用户,默认使用当前服务器当前用户)
@ #分隔符
10.0.0.31 #远端服务器IP
-o StrictHostKeyChecking=no #登录时跳过验证身份
2.Xshell连接不上虚拟机
#1.查网络,连接谁就ping谁
ping 10.0.0.31
tcping 10.0.0.31 22
#2.查端口
telnet 10.0.0.31 22
tcping 10.0.0.31 22
#3.如果可以ping通,端口不通
需要检测服务端口
netstat -lntp | grep sshd
#4.?卡是否启动
ip a
#5.防火墙
查看防火墙规则是否允许ssh服务
firewall-cmd --list-all
#6.查看虚拟网络编辑器
查看网关是否正确
#7.查看电脑的VMnat8网卡,配置信息是否正确
3.scp命令(远程文件传输)
scp客户端命令:远程拷贝
scp类似于rsync
scp全量 rsync增量
#scp支持推和拉
#推:将本地的/etc目录推送到backup服务器的/tmp目录下
[root@nfs ~]# scp -r /etc/ root@172.16.1.41:/tmp/
#将将本地的/etc目录下的文件推送到backup服务器的/tmp目录下
[root@nfs ~]# scp -r /etc/* root@172.16.1.41:/tmp/
#拉:将远端172.16.1.41服务器的/etc目录拉取到本地的/tmp目录下
[root@nfs ~]# scp -r root@172.16.1.41:/etc /tmp/
-P 指定端口,默认是22
-p 保持传输文件属性不变
-r 表示递归拷贝目录
-l 限速
#-l 限速 单位是 kb
[root@nfs ~]# dd if=/dev/zero of=./1.txt bs=1M count=500
[root@nfs tmp]# scp file root@172.16.1.41:/backup/
root@172.16.1.41's password:
file 46% 234MB 14.5MB/s 00:18
#设置速度为10M 10*1024*8=81920
[root@nfs tmp]# scp -l 81920 file root@172.16.1.41:/backup/
4.sftp命令
#文件传输命令
[root@web01 ~]# sftp root@10.0.0.31
#查看连接后服务器
sftp> ls
#查看本地服务器
sftp> lls
#命令 远程服务器文件 本地服务器位置
sftp> get 1_nfs.gif ./
#命令 本地服务器文件 远程服务器位置
sftp> put /data/1_nfs.gif /tmp/
#图形界面: Xftp FileZilla FlashFXP
sftp:
1.能上传文件夹
2.能支持断点续传
3.支持上传大于4G的文件
rz:
1.不能上传文件夹
2.不支持断点续传
3.只能上传小于4G的文件
SSH验证远程登录
1.方式一:基于账户密码的方式远程登录
#需要知道服务器的IP,端口,账户,密码,才可以通过ssh客户端连接远程主机
[root@web01 ~]# ssh -p 22 root@172.16.1.31
root@172.16.1.31's password:
Last login: Tue Feb 18 11:01:54 2020 from 10.0.0.7
[root@nfs ~]#
#密码设置条件
1.复杂的密码:yonghu_12@31_sysnum(记不住)
2.简单的密码:1 123(容易被破解)
3.每台服务器密码不一样
4.密码三个月更换一次
5.输?密码错误三次自动锁死
6.密码有key,30秒一变或者1分钟一变
2.秘钥
默认情况下,通过ssh客户端命令登陆远程服务器,需要提供远程系统上的帐号与密码,但为了降低密码泄露的机率和提高登陆的方便性,建议使用密钥验证方式。
1)生成秘钥对
-t 指定秘钥类型 rsa dsa
-C 指定用户邮箱
[root@m01 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
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:iULhx6BId6WORBUU6Y4o4naeb9Rm7hC9PmbWAloZ05M root@m01
The key's randomart image is:
+---[RSA 2048]----+
| . o=*=. |
|..oo.=. |
|. ..+.+ . |
| ..o=.E . |
| ..+o*.S |
|o. . B.+. |
|+ +.=.. |
| o o..oB . |
|. ooo.=oo |
+----[SHA256]-----+
2)推送公钥到要免密连接的服务器
#方式一:手动复制公钥
[root@m01 .ssh]# cat id_rsa.pub
ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQCvokaPfSni0HC+tppFKrKuYrSH41D1Y35Qi3cfJm7Yl7j
tnhN/E2bHaRxlx4Sff+ueLhS4IiewPwdywg/iG77HA8TIPBgnoW62PecNeuDn322KDo3qTzBMjm
XIY6AT4D2sDpEjhhN7JmeQ/uSKaGAQQUMcnW2YRPwgaFCZEGR5XjeD7BQAGxBYsx6TjFKOn55Wf
KBFHLQSO3jXv+2y1yil0s3hK7iBhiCCMRc34oBgMh1aMZQekUf8CgUlSwtR3RdgKzKP68L5R/gg
mZzGYZ5UOstJd0Vw1I14kZEaBHIF734tdNYbEcv8CXFku1iQzKrwkIs4FX7k3TxogI4XcE+/
root@m01
#把公钥复制到要连接的服务器
[root@web01 ~]# mkdir .ssh/
[root@web01 ~]# vim .ssh/authorized_keys
ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQCvokaPfSni0HC+tppFKrKuYrSH41D1Y35Qi3cfJm7Yl7j
tnhN/E2bHaRxlx4Sff+ueLhS4IiewPwdywg/iG77HA8TIPBgnoW62PecNeuDn322KDo3qTzBMjm
XIY6AT4D2sDpEjhhN7JmeQ/uSKaGAQQUMcnW2YRPwgaFCZEGR5XjeD7BQAGxBYsx6TjFKOn55Wf
KBFHLQSO3jXv+2y1yil0s3hK7iBhiCCMRc34oBgMh1aMZQekUf8CgUlSwtR3RdgKzKP68L5R/gg
mZzGYZ5UOstJd0Vw1I14kZEaBHIF734tdNYbEcv8CXFku1iQzKrwkIs4FX7k3TxogI4XcE+/
root@m01
[root@web01 ~]# chmod 700 .ssh/
[root@web01 ~]# chmod 600 .ssh/authorized_key
#方式二:命令推送公钥
[root@m01 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@172.16.1.31
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed:
".ssh/id_rsa.pub"
The authenticity of host '172.16.1.31 (172.16.1.31)' can't be established.
ECDSA key fingerprint is
SHA256:UPOOIxMjGD7QyAGVJAVNX+3Jf65ef33D1aDmML1DBcY.
ECDSA key fingerprint is
MD5:5d:7d:49:94:1d:a3:9c:2f:3c:66:db:64:3d:26:ea:90.
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.31's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@172.16.1.31'"
and check to make sure that only the key(s) you wanted were added.
[root@m01 ~]#
[root@m01 ~]# ssh 172.16.1.31
Last login: Tue Feb 18 12:14:27 2020 from 172.16.1.7
3)免密登录可以帮我们做巡检
[root@m01 ~]# cat xunjian.sh
#!/bin/bash
[ $# -ne 1 ] && echo "请输入执行的命令" && exit 1
for i in 31 21 7
do
echo "######172.16.1.$i#######"
ssh root@172.16.1.$i "$1"
done
SSH免密场景
1.实践场景,用户通过Windows/MAC/Linux客户端连接跳板机免密码登录,跳板机连接后端无外网的Linux主机实现免密登录,架构图如下。
2.实践多用户登陆一台服务器无密码
3.实践单用户登陆多台服务器免密码
1.windows使用xshell生成秘钥对
免交互expect[扩展]
1.安装expect
[root@m01 ~]# yum install -y expect
2.编写免密操作脚本
[root@m01 ~]# cat expect.exp
#!/usr/bin/expect
set ip 10.0.0.7
set pass 1
set timeout 30
spawn ssh root@$ip
expect {
"(yes/no)" {send "yes\r"; exp_continue}
"password:" {send "$pass\r"}
}
expect "root@*" {send "df -h\r"}
expect "root@*" {send "exit\r"}
expect eof
免交互sshpass[扩展]
1.安装sshpass
[root@m01 .ssh]# yum install -y sshpass
2.sshpass命令
[root@m01 .ssh]# sshpass -p 1 ssh root@172.16.1.7
sshpass 命令
-p 指定密码
1 密码
ssh 连接命令
root 用户
@ 分隔符
172.16.1.7 主机
3.编写sshpass脚本
[root@m01 .ssh]# vim ssh.sh
#!/bin/bash
for num in 41 31 7;do
echo ------------------ 10.0.0.$num -----------------
sshpass -p 1 ssh -o StrictHostKeyChecking=no root@10.0.0.$num df -h
done
SSH安全优化(配置文件/etc/ssh/sshd_config)
SSH作为远程连接服务,通常我们需要考虑到服务的安全,所以需要对服务进行安全方面的配置。
1、更改远程登陆的端口
2、禁止root管理员直接登录
3、密码认证方式改为秘钥认证
4、重要服务不适用公网IP地址
5、使用防火墙限制来源IP地址
Port 4399 # 修改sshd服务的默认端口
PermitRootLogin no # 禁止使用root登录服务器
PasswordAuthentication no # 禁止使用密码登录
UseDNS no # 禁止ssh进行dns反向解析,影响ssh连接效率参数
GSSAPIAuthentication no # 禁止GSS认证,减少连接时产生的延迟