ssh远程协议

37.day05--ssh远程协议
1.SSH基本概述
SSH是一个安全协议,在进行数据传输时,会对数据包进行加密处理,加密后在进行数据传输。确保了数据传输安全。
1.提供远程连接服务器的服务、2.对传输的数据进行加密

远程连接:  ssh  telnet RDP(Windows)     MAc--RDP-->Windows

ssh 主要是提供给服务器使用(Linux)          安全    数据包都是加密的  22/tcp
telnet 主要是提供给路由器\交换机\防火墙        明文  数据包不进行加密    23/tcp
必须要记下来的............

面试题: 请说说如下服务都是那些端口运行的?
    ftp         20/tcp 21/tcp
    http        80/tcp
    https       443/tcp
    ssh         22/tcp
    telnet      23/tcp
    dns .........   53/tcp 53/udp
    
面试题: 请说说如下端口都代表那些服务?
    80 443 22  3306  9000 10050  10051  

    验证 ssh 与 telnet 的区别?
    
    
    
    1.安装telnet服务
    [root@nfs ~]# yum install telnet-server -y

    2.启动telnet服务
    [root@nfs ~]# systemctl start telnet.socket
    
    3.准备普通用户进行远程链接测试   (开启抓包工具)
    [root@nfs ~]# useradd oldboy
    [root@nfs ~]# echo "1" | passwd --stdin oldboy

    
    telnet验证结果:
        1.不支持root直接登录
        2.所有的传递的数据都是明文
        
    ssh验证结果:    
        1.支持root直接登录
        2.所有传递的数据都是密文

2.SSH相关命令 scp

ssh客户端命令: 远程连接
[root@nfs ~]# ssh 172.16.1.41 #当前客户端是root,则登录的服务端也使用root
[oldboy@nfs ~]$ ssh root@172.16.1.41 #链接对端服务器,并写上链接服务器的用户身份
[root@nfs ~]# ssh -p22 root@172.16.1.41 #链接服务器,指定用户,并指定端口
[root@nfs ~]# ssh -p2222 root@172.16.1.41
ssh: connect to host 172.16.1.41 port 2222: Connection refused

sftp客户端命令: 文件传输
命令:
图形界面: xftp FileZilla
xftp:
1.能上传文件夹
2.能支持断点续传
3.能支持上传大于4个G的文件

rz:
    1.只能上传小于4G的文件
    2.不支持断点续传
    3.不能传文件夹

scp客户端命令: 远程拷贝
scp--->rsync 都是用来远程拷贝
scp是全量
rsync是增量


scp 支持数据的推送和拉取 windows也有scp工具 winscp

推送文件
[root@nfs ~]# scp 12312321 root@172.16.1.41:/root
root@172.16.1.41's password:
12312321 100% 49 44.2KB/s 00:00

拉取文件
[root@nfs ~]# scp root@172.16.1.41:/root/2 ./
root@172.16.1.41's password:
2 100% 4 0.5KB/s 00:00

推送目录
[root@nfs ~]# scp -rp /etc root@172.16.1.41:/root
大量的小文件传输
real 0m59.852s
user 0m9.821s
sys 0m21.730s

打包之后的效果对比
    real    0m7.654s
    user    0m0.040s
    sys     0m0.065s

限速 -l 单位是kb-->KB-->
[root@nfs ~]# dd if=/dev/zero of=/root/file bs=1M count=500

传输的速度 74MB/s 占用实际带宽 1000兆带宽
[root@nfs ~]# scp file 172.16.1.41:/root
root@172.16.1.41's password:
file 100% 500MB 74.0MB/s 00:06

80960kb/8KB/1024=10MB/s 占用实际带宽 100兆 带宽
[root@nfs ~]# scp -l 80960 file 172.16.1.41:/root
root@172.16.1.41's password:
file 100% 500MB 10.0MB/s 00:50

占用10兆带宽-->实际的传输速度1MB-->scp具体换算的单位 8000
[root@nfs ~]# scp -l 8000 file 172.16.1.41:/root
root@172.16.1.41's password:
file 10% 52MB 1.0MB/s 07:22 ETA

安全: 效率就低
性能: 安全就差

3.SSH验证方式

方法一: 用户和密码
知道服务器的IP端口,账号密码,即可通过ssh客户端命令登陆远程主机。
ssh -p22 root@10.0.0.61
root用户
root密码

简单: 简单容易被破解
复杂: 复杂又记不住
密码不要设定为一样:
密码三个月更换一次:  lastpass 1passwd keepass

    人   ---> 道德层面---->

方式二: 秘钥 ( 锁 钥匙 )
降低密码泄露的机率和提高登陆的方便性,建议使用密钥验证方式。

1.在 管理机 生成一对秘钥 ssh-keygen
[root@m01 ~]# ssh-keygen -C xuliangwei@qq.com
[root@m01 ~]# ll ~/.ssh/
总用量 12
-rw-------. 1 root root 1679 5月 24 19:16 id_rsa #私钥 生活中,钥匙
-rw-r--r--. 1 root root 399 5月 24 19:16 id_rsa.pub #公钥 生活中,锁

2.在 管理机 上下发公钥给 nfs服务端 (锁 公钥)
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.31
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'"

  1. 管理机 通过ssh命令连接nfs服务器,如果能实现免密码登陆则ok (钥匙 私钥)
    [root@m01 ~]# ssh 'root@172.16.1.31'
    Last login: Fri May 24 19:24:58 2019 from 172.16.1.61
    [root@nfs ~]#

4.将ssh登陆主机的信息放入一个文件,当我执行文件时就自动的链接到该主机了.....

5.将从WIndows下复制好的公钥粘贴至跳板机~/.ssh/authorized_keys中,然后测试
[root@m01 ~]# cd ; umask 077; mkdir -p .ssh ; cd .ssh
[root@m01 .ssh]# vim authorized_keys #添加windows公钥

塞key
我: 公钥信息........
你: 公网IP Port root

扩展:
1.测试链接无需密码
[root@m01 ~]# ssh root@172.16.1.31
[root@nfs ~]#

2.可以不登录对端主机,执行命令
[root@m01 ~]# ssh root@172.16.1.31 "ifconfig eth1"
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.16.1.31  netmask 255.255.255.0  broadcast 172.16.1.255

3.使用scp也无需密码
[root@m01 ~]# scp oldboy  root@172.16.1.31:/tmp
oldboy                                           100%   26     1.9KB/s   00:00  

4.ssh密码+ Google Authenticator 实现双向认证
简单来说,就是当用户通过ssh登陆系统时,先输入google的随机验证码,然后在输入服务器的ssh密码

[root@m01 ~]# yum -y install wget gcc make pam-devel libpng-devel pam-devel autoconf automake libtool

[root@m01 ~]# cat ~/.google_authenticator
SKVOCWN23G7AAPSVEDOMWX4H74
" RATE_LIMIT 3 30 1558709812
" WINDOW_SIZE 17
" HOTP_COUNTER 4
47386284
70612256
80548411
83234725
68105428

5.SSH安全优化

SSH作为远程连接服务,通常我们需要考虑到该服务的安全,所以需要对该服务进行安全方面的配置。

1.更改远程连接登陆的端口
2.禁止ROOT管理员直接登录 --普通用户--sudo提权 || 普通用户 --- su - root
3.密码认证方式改为密钥认证
4.重要服务不使用公网IP地址 ( 跳板机 | [ 防火墙 | 负载均衡 ] )

SSH服务登录防护需进行如下配置调整,先对如下参数进行了解
Port 6666 # 修改sshd服务监听的端口
PermitRootLogin no # no代表禁止root用户直接远程连接
PasswordAuthentication no # no代表禁止使用密码的方式连接

UseDNS no # 禁止ssh进行dns反向解析,影响ssh连接效率参数
GSSAPIAuthentication no # 禁止GSS认证,减少连接时产生的延迟

将如下具体配置添加至/etc/ssh/sshd_config文件中,参数需根据实际情况进行调整

SSH###

Port 6666

PasswordAuthentication no

PermitRootLogin no

GSSAPIAuthentication no
UseDNS no

END###


Port 6666 #减少被扫描到的几率
PermitRootLogin no #禁止root直接通过远程连接
PasswordAuthentication no #禁止所有用户使用密码远程连接

变更端口为6666,防止别人轻易的被扫描.
root用户无法通过密码登录,也无法通过秘钥登录,总之就是不行.
普通用户仅能通过秘钥登录,无法通过密码登录.


ssh-keygen生成秘钥非交互,注意,如果存在则会提示是否覆盖.
ssh-keygen -P "" -f ~/.ssh/id_rsa

6.SSH安全防护
fail2ban可以监控系统日志,并且根据一定规则匹配异常IP后使用Firewalld将其屏蔽,尤其是针对一些爆破/扫描等非常有效。

1.开启Firewalld防火墙
[root@bgx ~]# systemctl start firewalld
[root@bgx ~]# systemctl enable firewalld
[root@bgx ~]# firewall-cmd --state
running
2.修改firewalld规则,启用Firewalld后会禁止一些服务的传输,但默认会放行常用的22端口, 如果想添加更多,以下是放行SSH端口(22)示例,供参考:

#放行SSHD服务端口
[root@bgx ~]# firewall-cmd --permanent --add-service=ssh --add-service=http 
#重载配置
[root@bgx ~]# firewall-cmd --reload
#查看已放行端口
[root@bgx ~]# firewall-cmd  --list-service

3.安装fail2ban,需要有epel
[root@bgx ~]# yum install fail2ban fail2ban-firewalld mailx -y

4.配置fail2ban规则.local会覆盖.conf文件
[root@bgx fail2ban]# cat /etc/fail2ban/jail.local
[DEFAULT]
ignoreip = 127.0.0.1/8
bantime = 86400
findtime = 600
maxretry = 5
banaction = firewallcmd-ipset
action = %(action_mwl)s

[sshd]
enabled = true
filter = sshd
port = 22
action = %(action_mwl)s
logpath = /var/log/secure

5.启动服务,并检查状态
[root@bgx ~]# systemctl start fail2ban.service
[root@bgx ~]# fail2ban-client status sshd

6.清除被封掉的IP地址
[root@bgx ~]# fail2ban-client set sshd unbanip 10.0.0.1

7.如果有ssh秘钥无法正常连接的情况,可以尝试使用如下的调试模式.开启ssh debug调试模式。
(1)31服务器上开启临时ssh服务 /usr/sbin/sshd -p 10001 -d
(2)61服务器上访问 ssh -vvv -p 10001 root@10.0.0.31
(3)31服务器上查看debug日志,发现身份验证被拒绝,目录的所有权错误。
Authentication refused: bad ownership or modes for directory /root

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容