SSH

一、ssh安全远程管理

1.1 什么是ssh

ssh 是 Secure Shell 的缩写,是一个建立在应用层上的安全远程管理协议。ssh是目前较为可靠的传输协议,专为远程登录会话和其他网络服务提供安全性。利用ssh协议可以有效防止远程管理过程中的信息泄露问题。
ssh 可用于大多数 UNIX 和类 UNIX 操作系统中,能够实现字符界面的远程登录管理,它默认使用22端口,采用密文的形式在网络中传输数据,相对于通过明文传输的 Telnet 协议,具有更高的安全性。

1.2 ssh的登录验证模式

ssh提供了基于账户密码(口令)和密钥对两种登录验证方式,这两者都是通过密文传输数据的。
账户密码验证:
在这里插入图片描述
账户密码登录认证过程中传输的是用户的账户名和密码,密码具有足够的复杂度才能具有更高的安全性。
Linux 主机之间的远程管理工具是 ssh 命令,所以我们直接使用 ssh 进行远程登录

格式: ssh 用户名@IP地址
示例: ssh root@192.168.88.20

windows 远程登录Linux主机一般使用第三方工具,比如Xshell等工具

密钥对验证:
在这里插入图片描述
1.首先需要在Client上创建一对密钥,并且需要把公钥放在需要访问的Server上

2.当Client需要连接Server时,Client端的软件就会向Server端发出登录请求,请求使用密钥对中的的公钥进行安全验证

3.Server收到请求之后,会在该用户的家目录下查询公钥文件,拿Client发送过来的公钥和自己家目录下的公钥进行比较

4.如果两个公钥一致,Server就用公钥加密“challenge(质疑)”,并把它发送给Client软件。Client收到加密内容之后,使用本地的私钥进行解密,再把解密结果发送给Server端,Server端验证成功后,允许登录
注意:若第3个步骤对比结果失败,则Server端会通知Client端此公钥未在本机注册,无法验证登录
在这里插入图片描述

1.3 配置ssh服务

1.3.1环境准备
准备好两台Linux操作系统的主机,配置好相关网络参数,实现可以正常通信,并将主机名修改为不同的名字

临时关闭防护功能:

iptables -F #清空防火墙规则
setenforce 0 #临时关闭SELinux

永久关闭防护功能:

chkconfig iptables off

#设置防火墙开机不自启动

sed -i '7s/enforcing/disabled/' /etc/selinux/config #永久关闭SELinux

注意:以上两条命令执行后,需要重启服务器才能生效,切记

1.3.2用户密码验证

Linux主机之间的远程管理工具是ssh命令,所以我们直接使用ssh进行远程登录

格式: ssh 用户名@IP地址
示例:
[root@centos1 ~]$ ssh root @10.1.1.12 #第一次登录
………………
Are you sure you want to continue connecting (yes/no)? yes #确认链接
………………
root@10.1.1.12`s password: #输入密码
Last login: Tue Apr 13 10:24:04 2021 from 10.1.1.1
[root@centos2 ~]$ exit
登出
Connection to 10.1.1.12 closed.

[root@centos1 ~]$ ssh root@10.1.1.12 #第二次登录
root@10.1.1.12's password: 
Last login: Tue Apr 13 10:55:04 2021 from 10.1.1.11
登出
Connection to 10.1.1.12 closed.

windows远程登录Linux主机一般使用第三方工具,比如Xshell等工具

格式: ssh root@10.1.1.12

3.3密钥对验证
Linux主机之间的密钥对登录验证

1.客户端生成密钥对文件
ssh-keygen-trsa -b 2048

[root@centos1 ~]$ ssh-keygen -t rsa -b 2048
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:C3AykyNUvqT3lzAga+8fFPM+10SsHqD7MEC/LwmwPPo root@centos1
The key's randomart image is:
+---[RSA 2048]----+
|  ...            |
| . . .     .     |
|  o % + .   o    |
|  .B @ = . o     |
| .+o+ B S o .    |
| .+o.+ B + +     |
| . ...B.* o .    |
|.  .  oB o       |
| .E ....o        |
+----[SHA256]-----+

-t 指定加密类型(rsa/dsa等)
-b 指定密钥对加密长度
询问1:执行过程中会询问保存位置,一般默认保存在当前用户家目录下的.ssh/目录下
询问2:是否对密钥文件进行加密
加密:若加密,则在调用密钥文件时需要先验证密钥的密码,密码正确才能使用密钥文件
不加密:若不加密,则密钥文件可以直接被调用,整个登录验证过程无需输入任何密码,即为免密登录

2.将公钥文件上传至服务器端
ssh-copy-id 用户名@服务器IP地址 #该用户名和要用来登录服务器的用户名一致

[root@centos1 ~]$ ssh-copy-id root@10.1.1.12
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/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@10.1.1.12's password: #输入服务器密码

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@10.1.1.12'"
and check to make sure that only the key(s) you wanted were added.

3.客户端尝试登录服务器
ssh 用户名@服务器IP地址 #密钥对验证优先级大于账户密码验证

[root@centos1 ~]$ ssh root@10.1.1.12
Last login: Tue Apr 13 10:56:41 2021 from 10.1.1.11

Windows使用密钥对登录Linux

1.使用Xshell自带的密钥对生成向导生成密钥对
在这里插入图片描述
2.将公钥导入Linux主机的指定用户下的指定公钥配置文件
后面用哪个用户登录就放在谁家里,这里我们先用 root 用户做实验
在root家目录下,找到.ssh目录,然后在里面创建 authorized_keys 文件,并且将公钥写入进去

3.使用windows尝试登录指定用户

1.3.4 禁止使用密码登录

当我们学会了使用密钥对进行验证后,建议生产环境下将账户密码登录功能关掉
配置文件:/etc/ssh/sshd_config

[root@centos2 ~]$ vim /etc/ssh/sshd_config #修改文件
PasswordAuthentication no # 63行
[root@centos2 ~]# systemctl restart sshd #重启服务
`注意:ssh的配置文件中,并不是注释掉的就是不生效的,有些是默认生效,需要修改时一定要取消注释再修改`
[root@centos3 ~]# ssh root@10.1.1.12 #连接测试
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
1.3.5 禁止使用root远程登录

root 在系统中是一个可以为所欲为的角色,我们可以在平时的操作中用普通用户操作,在有需要修改一些系统设置的时候再从普通用户切换到 root 用户,这样可以最大限度的避免因为误操作而对系统造成破坏,同时也可以避免黑客在暴力破解后直接使用 root 用户登录系统,一般在远程登录管理上我们会禁止直接使用 root 用户登录
配置文件:/etc/ssh/sshd_config

[root@centos2 ~]# vim /etc/ssh/sshd_config
PermitRootLogin no #38 行
[root@centos2 ~]# systemctl restart sshd #重启服务
1.3.6 修改默认端口、限制ssh监听IP

修改默认端口:ssh 作为一个用来远程管理服务器的工具,需要特别的安全,默认情况下使用TCP的22端口,若不进行修改,很容易被利用遭到攻击,所以我们一般都会修改端口,尽量修改一个高位端口(范围1-65535)
配置文件:/etc/ssh/sshd_config

选项:
Port 9527
ssh -p 端口 用户名@服务器IP
ssh -p 9527 root@10.1.1.12

限制ssh监听IP:
有些服务器则安全级别更高一些,不允许使用外网直接登录,只有通过局域网才能登录,我们可以在机房里设置其中一台能够被外网远程连接,其他的主机都通过这个机器进行远程连接即可
配置文件:/etc/ssh/sshd_config
选项:
ListenAddress 10.1.1.11

1.4 ssh服务相关命令

scp:安全的远程文件复制命令
scp是 secure copy 的简写,用于在Linux下进行远程拷贝文件的命令,类似于命令有cp,scp传输是加密的,所以可能会稍微影响一点速度。另外,scp还非常不占资源,不会提高多少系统负荷
格式:scp 本地文件 用户名@服务器IP:目录

scp /root/test.txt root@10.1.1.12:/tmp
-P 端口	#若端口不是默认22,则需要使用此格式指定端口

sftp:安全的文件传输协议
sftp是Secure FileTransferProtocol的缩写,安全文件传送协议。sftp与ftp有着几乎一样的语法和功能。由于这种传输方式使用了加密/解密技术,所以sftp比ftp更安全一些,但传输效率比普通的FTP要低得多
格式:sftp用户名@服务器IP

sftp root@10.1.1.12
-oPort=端口	#若端口不是默认22,则需要使用此格式指定端口

交互命令:
help:查看在交互模式下支持哪些命令
pwd/lpwd:pwd是查看服务器所在路径;lpwd是查看客户端所在路径
ls/lls:ls是查看服务器当前目录下的文件列表;lls是查看客户机当前所在路径的所有文件列表
put:将客户机中的指定文件上传到服务器端
get:将服务器端的指定文件下载到客户机的当前所在目录
rm:删除掉服务器端的指定文件
quit:退出sftp的交互模式,断开和服务器之间的连接

TCP Wrappers 简单防火墙

TCP_Wrappers是一个工作在第四层(传输层)的的安全工具,对有状态连接(TCP)的特定服务进行安全检测并实现访问控制,界定方式是凡是调用 libwrap.so 库文件的的程序就可以受 TCP_Wrappers 的安全控制。它的主要功能就是控制谁可以访问,常见的程序有rpcbind、vsftpd、sshd,telnet。

判断方式:

  1. 查看对应服务命令所在位置
    which sshd
  2. 查看指定命令执行时是否调用libwrap.so文件
    ldd /usr/sbin/sshd | grep libwrap.so

工作原理
以ssh为例,每当有ssh的连接请求时,先读取系统管理员所设置的访问控制文件,符合要求,则会把这次连接原封不动的转给ssh进程,由ssh完成后续工作;如果这次连接发起的ip不符合访问控制文件中的设置,则会中断连接请求,拒绝提供ssh服务。
1.优先查看 hosts.allow,匹配即停止
2.允许个别,拒绝所有:hosts.allow 文件添加允许的策略,hosts.deny 文件添加 all
3.拒绝个别,允许所有:hosts.allow 文件为空,hosts.deny 文件添加单个拒绝的策略
在这里插入图片描述

使用

TCP_Wrappers的使用主要是依靠两个配置文件 /etc/hosts.allow, /etc/hosts.deny,以此实现访问控制,默认情况下,/etc/hosts.allow,/etc/hosts.deny 什么都没有添加,此时没有限制

配置文件编写规则:
service_list@host: client_list
service_list: 是程序(服务)的列表,可以是多个,多个时,使用,隔开
@host:设置允许或禁止他人从自己的哪个网口进入。这一项不写,就代表全部
client_list:是访问者的地址,如果需要控制的用户较多,可以使用空格或,隔开
格式如下:
基于IP地址: 10.1.1.11 10.1.1…
基于主机名: www.test.com .test.com 较少用
基于网络/掩码: 192.168.0.0/255.255.255.0
内置ACL:ALL(所有主机)、LOCAL(本地主机)

实验案例:
拒绝单个 IP 使用 ssh 远程连接:
hosts.allow:空着
hosts.deny:sshd:10.1.1.11
拒绝某一网段使用 ssh 远程连接:
hosts.allow:空着
hosts.deny:sshd:10.1.1.
仅允许某一 IP 使用 ssh 远程连接:
hosts.allow:sshd:10.1.1.11
hosts.deny:sshd:ALL

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值