远程访问及控制工具SSH

1,ssh远程管理

用在什么地方用来干嘛的

SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。

2,openssh服务器

2.1 ssh协议
  • 是一种安全通道协议
  • 对通信数据进行了加密处理,用于远程管理
2.2 openssh
  • 服务名称:sshd
  • 服务端主程序:/usr/sbin/sshd
  • 服务端配置文件;/etc/ssh/sshd_config
2.3 服务监听选项
  • 端口号(默认端口号22),协议版本,监听ip地址
  • 禁用反向解析
    例如:禁用DNS反向解析地址可以提高服务器的响应地址:
[root@server1 ~]# vi //etc/ssh/sshd_config
#Port 22   //监听端口号为22
#ListenAddress 0.0.0.0    //监听地址为0.0.0.0
#UseDNS no       //禁用DNS反向解析
root@server1 ~]# service sshd reload     //重新加载sshd

2.4 用户登录控制
  • 禁用root 用户,空密码用户(默认是允许root登录)
  • 限制登录验证时间,重试次数
  • AllowUsers, DenyUser

例如:


root@server1 ~]# vi /etc/ssh/sshd_config
LoginGraceTime 2m    // 设置登录验证时间为2分钟
PermitRootLogin no   //禁止root用户登录     
MaxAuthTries 6       //最大重试次数为6
PermitEmptyPasswords no  //禁止空密码用户登录


当希望只允许或禁止某些用户登录时,可以使用AllowUsers或DenyUser配置,两者用法类似,所以尽量不要同时使用。
例如:若只允许jerry和admin用户登录,且其中admin用户仅能够从ip地址为192.168.1.10的主机远程登录,可以参考以下操作:

[root@server1 ~]# vi /etc/ssh/sshd_config

AllowUsers jerry admin@192.168.1.10   //如果有多个用户可以用空格分隔  (这里的地址是客户机的地址)
2.5 登录验证方式
  • 密码验证: 核对用户名,密码是否匹配
  • 密钥对验证:核对客户的私钥,服务端公钥是否匹配
[root@localhost~]# vi letclssh/sshd_config    
PasswordAuthentication yes  //启动密码验证
PubkeyAuthentication yes   //启动密钥对验证
AuthorizedKeysFile .ssh/authorized_ keys     //指定公钥库位置

3,使用ssh客户端程序

3.1 命令程序 ssh, scp, sftp
  • ssh命令 — 远程安全登录 ( 端口选项: -p 22 )
    ssh user@host
  • scp命令---- 远程安全复制
    格式1:scp user@host:file1 file2
    格式2 : scp file1 user@host:file2

两种格式举例说明如下
服务器端复制文件给客户机

 scp /etc/passwd root@192.168.1.101:/opt/ (服务器上打的)

客户机端复制文件给服务器

 scp /opt/1111.txt zhangsan@192.168.1.100:/home/zhangsan (客户机上面打)

服务器端复制文件给客户机

 scp zhangsan@192.168.1.100:/home/zhangsan/1.txt      /root   (客户机上打)
       zhangsan@192.168.1.100's password:
       1111.txt              100%   7   0.4kb/s      00:00

客户机端复制目录给服务器

 scp -r /opt/ zhangsan@192.168.1.100:/home/zhangsan
       zhangsan@192.168.1.100's password:
       1111.txt                                100%     7     0.4kb/s      00:00
       passwd                                 100%   2379  1.3MB/s    00:00
  • sftp命令 ----安全ftp上传下载(共用22号端口)
    sftp user@host
    例如
sftp zhangsan@192.168.1.100
zhangsan@192.168.1.100's password:
Connected to 192.168.1.100
sftp> ls
1111.txt opt 
sftp> get 1111.txt
Fetching /home /zhangsan/1111.txt. to 1111.txt
/home /zhangsan /1111.txt                       100%        7      0.4kb/s   00:00 

4,构建密钥对验证的ssh体系

4.1 整体实现过程如下图理解

在这里插入图片描述

4.2 在客户机中创建密钥对
  • ssh-keygen 命令
  • 可用的加密算法:RSA,ecdsa或DSA
[zhangsan@localhost ~]$ ssh-keygen -t ecdsaGenerating public/private ecdsa key pair.
Enter file in which to save the key (/home/zhangsan/.ssh/id_ecdsa):Created directory '/home/zhangsanl.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:       //设置密钥短语
Your identification has been saved in /homelzhangsan/.ssh/id_ecdsa.  //私钥文件位置
Your public key has been saved in /homelzhangsan/.ssh/id_ecdsa.pub.  // 公钥文件位置

5,TCP Wrappers 访问控制

TCP wrappers是基于主机的访问控制系统。它用来阻止非授权的访问,只允许特定客户访问你服务器上的服务

5.1 为什么使用tcp wrappers

TCP wrappers在你的服务器与任何潜在的攻击者之间创建了额外的安全层。除了访问控制功能之外,它还提供日志记录和主机名验证。TCP wrappers在大多数Linux或者类UNIX系统能开箱即用,这使得它能够容易的配置,是对目前已经存在的防火墙的完美补充。

5.2 如何判断一个程序是否支持TCP wrappers

不是所有的程序都支持TCP wrappers。程序必须与libwrap库编译。常见的服务像sshd,ftpd和telnet默认支持TCP wrappers。我们可以使用如下命令来检查是否支持TCP wrappers:ldd /path-to-daemon | grep libwrap.so
ldd命令会打印出可执行文件共享依赖列表。把ldd命令输出管道给grep,来查找是否包含libwrap.so。如果有输出,则表示支持TCP wrappers。本篇文章我们主要针对sshd

5.3 保护原理

如图:
在这里插入图片描述

5.4 保护机制的实现方式
  • 方式一:通过tcpd程序对其他服务程序进行包装
  • 方式二:由其他服务程序调用libwrap.so.* 链接库
5.5访问控制策略的配置文件
  • /etc/hosts.allow
  • /etc/hosts.deny
5.6 设置tcp wrappers 的访问控制策略
  • 策略格式 : 服务程序列表:客户端地址列表
  • 服务程序列表
    • 多个服务以逗号分隔,ALL表示所有服务
  • 客户端地址列表
    • 多个地址以逗号分隔,ALL表示所有地址
    • 允许使用通配符?和*
    • 网段地址,如192.168.4.或者192.168.4.0/255.255.255.0
    • 区域地址,如.benet.com
5.7 策略的应用顺序
  • 1,检查hosts .allow ,找到匹配则允许访问
  • 2,再检查hosts.deny ,找到则拒绝访问
  • 3,若两个文件中均无匹配策略,则默认允许访问
5.8 策略应用示例
  • 仅允许以下地址访问sshd服务
    • 主机61.63.65.67
    • 网段192.168.2.0/24
  • 禁止其他所有地址访问受保护的服务
[root@localhost~]# vi letc/hosts.allow
sshd:61.63.65.67,192.168.2.*
[root@localhost ~]# vi letc/hosts.deny
sshd:ALL

以上所有操作演示如下:


ssh服务器   192.168.1.100
ssh客户机   192.168.1.101

**************第一种方式:客户机用服务器端存在的系统账户密码登录************
--192.168.1.100服务器上的配置更改---
systemctl stop firewalld
setenforce 0
rpm -qa  | grep openssh  ###查看由没有装OPENSSH

vi /etc/ssh/sshd_config    ##这边常规登录选项都不需要改,除非是服务器安全加固。

#Port 12345     ###改端口的地方 要去掉#号 改端口必须这个端口不能被占用
#ListenAddress 0.0.0.0      ##监听的IP地址,侦听的哪个网卡 哪个线路被连接过来。

#LoginGraceTime 2m          ####登录时候允许你2分钟时间内输入密码,超过就提示超时
#PermitRootLogin yes        ####允许不允许root 用户登录,线网是禁止root登录,一般是su - 提权
#MaxAuthTries 6                 ####最大认证的次数。意思你最大输入多少次错误

#allowusers zhangsan wangwu@192.168.1.101,192.168.1.102   
####只允许zhangsan和wangwu以192.168.1.101的ip登录,root账户不允许登录
systemctl restart sshd
netstat -anpt | grep sshd
修改端口号后验证:
ssh root@192.168.1.100 -p 12345
---192.168.1.101客户机上验证---
客户机以root用户尝试登录服务器
ssh root@192.168.1.100
Permission denied, please try again.
客户机以zhangsan用户尝试登录服务器
ssh zhangsan@192.168.1.100
zhangsan@192.168.1.100's password: 
Last login: Sun Aug  4 21:51:07 2019 from 192.168.1.101
[zhangsan@localhost ~]$ 
客户机以wangwu用户尝试登录服务器
ssh wangwu@192.168.1.100
wangwu@192.168.1.100's password: 
[wangwu@localhost ~]$ 
客户机以yx用户尝试登录服务器
ssh yx@192.168.1.100
yx@192.168.1.100's password: 
Permission denied, please try again.
yx@192.168.1.100's password: 
Permission denied, please try again.
yx@192.168.1.100's password: 
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
-----登录上服务器后可以用whoami查询当前用户及用ifconfig来确认是服务器的IP---
---复制----
服务器端复制文件给客户机
scp /etc/passwd root@192.168.1.101:/opt/(服务器上打的)
客户机端复制文件给服务器
scp /opt/1111.txt zhangsan@192.168.1.100:/home/zhangsan(客户机上打的)
zhangsan@192.168.1.100's password: 
1111.txt                                      100%    7     0.4KB/s   00:00 
服务器端复制文件给客户机
scp zhangsan@192.168.1.100:/home/zhangsan/1.txt   /root  (客户机上打的)

客户机端复制目录给服务器
scp -r /opt/ zhangsan@192.168.1.100:/home/zhangsan
zhangsan@192.168.1.100's password: 
1111.txt                                      100%    7     0.4KB/s   00:00    
passwd                                        100% 2379     1.3MB/s   00:00  
-----客户端的上传和下载(因为sftp服务也在使用22号端口,无须另外设置)-----
sftp zhangsan@192.168.1.100
zhangsan@192.168.1.100's password: 
Connected to 192.168.1.100.
sftp> ls
1111.txt  opt       
sftp> get 1111.txt
Fetching /home/zhangsan/1111.txt to 1111.txt
/home/zhangsan/1111.txt                       100%    7     0.4KB/s   00:00    
sftp> put initial-setup-ks.cfg 
Uploading initial-setup-ks.cfg to /home/zhangsan/initial-setup-ks.cfg
initial-setup-ks.cfg                          100% 1963   106.8KB/s   00:00   
*****************第二种方式:客户机构建密码对传送给服务器端,以服务器端的账户登录***********
因为这是另外一种方式,因此环境得还原成没有做第一种方式之前的环境,否则会影响测试结果。
实验步骤:
1.客户机创建密码对
su zhangsan                 ##客户端切到zhangsan用户下
2、
[zhangsan@localhost ~]$ ssh-keygen -t RSA
Generating public/private RSA key pair.
Enter file in which to save the key (/home/zhangsan/.ssh/id_rsa):         ####这个地方回车 告诉你创建公钥私钥的保存的地方
Created directory '/home/zhangsan/.ssh'.
Enter passphrase (empty for no passphrase):                               ###这边是可以创建密码短语,如果不创建,可以时间不需要密码登录
Enter same passphrase again: 
Your identification has been saved in /home/zhangsan/.ssh/id_rsa.
Your public key has been saved in /home/zhangsan/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:9PCoky53GC6wQ0K4RSsP1E/u/AywC+rFC1lz9cwMceM zhangsan@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
|  .    . o       |
| ... .  + .      |
|o. .+  ooE       |
|+.o. o..*=       |
|.* o=.  S=o      |
|o.B.o+.o         |
|.=.=..Bo         |
|. =.+.++.        |
|.. o +..         |
+----[SHA256]-----+
普通用户加入wheel组
[root@localhost .ssh]#gpasswd -a zhangsan wheel
cd .ssh/       ####进入这个隐藏的文件 下面有2个秘钥 公 私
[zhangsan@localhost .ssh]$ sudo /usr/bin/ls /home/zhangsan/.ssh/
id_rsa  id_rsa.pub
2.将公钥对上传至服务器
[zhangsan@localhost .ssh]$ sudo /usr/bin/scp id_rsa.pub root@192.168.1.100:/tmp   #将公钥传入 /tmp 下
The authenticity of host '192.168.32.187 (192.168.32.187)' can't be established.
RSA key fingerprint is SHA256:qSPPhKr6A22Jo4XdVdNkHz4OhJtxZU7LUBrsOBonHo4.
RSA key fingerprint is MD5:16:23:35:42:fc:67:df:a2:0f:d2:f2:99:39:d3:a2:4a.
Are you sure you want to continue connecting (yes/no)? yes      ###输入yes
Warning: Permanently added '192.168.32.187' (RSA) to the list of known hosts.
root@192.168.1.100's password:                                               ##输入密码
id_rsa.pub                                    100%  409   871.0KB/s  
3.服务器端将上传的公钥导入特定账户的公钥数据库里

公钥文件:~/.ssh/authorized_keys(导入到lisi的公钥数据库)
mkdir /home/lisi/.ssh
[root@localhost ~]# cat /tmp/id_rsa.pub >> /home/lisi/.ssh/authorized_keys
[root@localhost ~]# cat /home/lisi/.ssh/authorized_keys 
4.客户机用服务器里的特定账户登录
zhangsan$ssh lisi@192.168.1.100
whoami
lisi
-----另一种密码传递方式-----
ssh-keygen -t rsa
sudo /usr/bin/ssh-copy-id -i /home/zhangsan/.ssh/id_rsa.pub lisi@192.168.1.100
Now try logging into the machine, with:   "ssh 'lisi@192.168.1.100'"
and check to make sure that only the key(s) you wanted were added.
验证:
[zhangsan@localhost ~]$ssh lisi@192.168.1.100
The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established.
ECDSA key fingerprint is SHA256:nDv7Gq7d6spvoFpO6UD4qh8EzUkd+nJaqjX4B/pq3e0.
ECDSA key fingerprint is MD5:f7:a9:0a:36:c2:c4:a2:d7:23:a5:c3:03:0f:d8:7c:56.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.100' (ECDSA) to the list of known hosts.
whoami
lisi

?????注:两种密码的传递方式不一样,第一种用输入的密码是zhangsan自己创建的私钥短语,而第二种方式输入的
密码是对方用户lisi的密码。
------免密登录(无密码)-----------
生成密钥
ssh-keygen -t rsa
上传至别的机器,一般是服务器生成密钥,传给客户机,这样服务器可以免密登录上客户机
ssh-copy-id 192.168.1.100
验证
ssh root@192.168.1.100
-----免密登陆:代理(不安全)--这是有密码的情况下再多打ssh-agent bash,没有就不用了--------------
服务器上打 ssh-keygen -t rsa
服务器上打 ssh-copy-id 192.168.1.100
服务器上打 ssh-agent bash
服务器上打 ssh-add
输入密钥密码
代理成功!无密码直接登陆!
ssh root@192.168.1.100
------TCP Wrappers访问控制---
相当于ACL访问控制列表一样,不过控制的是tcp协议类型的服务
vi /etc/hosts.allow
举例
sshd,vsftpd:192.168.1.* 任意字符  192.168.1.1-192.168.1.254
sshd,vsftpd:192.168.1.  所有      192.168.1.0/24
sshd,vsftpd:192.168.1.? 单个字符  192.168.1.1-192.168.1.9
vi /etc/hosts.deny
举例
sshd,vsftpd:ALL         禁止所有
sshd,vsftpd:192.168.2.  仅禁止192.168.2.0/24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值