linux----SSH远程访问及控制!

Posted handsomeboy-东

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux----SSH远程访问及控制!相关的知识,希望对你有一定的参考价值。

SSH概述

SSH是一种安全通道协议,默认使用TCP22号端口,主要用来远程登录和远程复制等功能,它给通信双方的数据传输进行了加密处理,相比于telnet这种明文传输的额远程登录提供了很好的安全性

OpenSSH服务器

  • 服务名称:sshd(CentOS6.5后默认安装开启)
  • 服务端配置文件:/etc/ssh/sshd_config
  • 客户端配置文件:/etc/ssh/ssh_config
[root@client ~]# rpm -qa | grep openssh
openssh-7.4p1-16.el7.x86_64
openssh-server-7.4p1-16.el7.x86_64
openssh-clients-7.4p1-16.el7.x86_64
[root@localhost .ssh]# vim /etc/ssh/sshd_config       //查看配置文件

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

SSH登录验证方式

  1. 密码认证:以服务器中本地系统用户的登录名称,密码进行认证,这种方式安全性较低
  2. 密钥对验证:要求提供相匹配的密钥(公钥,私钥)来通过验证,分为两种
    (1)对称加密:采用单密钥系统加密方法,同一密钥用于信息的加密和解密,优点加密速度和效率很快,缺点是容易被破解,不是很安全
    (2)非对称加密:采用公开密钥和私有密钥两种密钥加密,两种密钥成对生成,可以互相加密解密,公钥对外公开,私钥只有持有人才知道
    在这里插入图片描述

SSH配置小实验

实验设备:两台linux系统,一台做server,一台作client

[root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# setenforce 0
[root@localhost ~]# hostname client
[root@localhost ~]# bash
[root@client ~]#  ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.43.130  netmask 255.255.255.0  broadcast 192.168.43.255
        inet6 fe80::4066:d678:639c:dea5  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:3f:67:c5  txqueuelen 1000  (Ethernet)
        RX packets 2027  bytes 136282 (133.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 140  bytes 15043 (14.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[root@handsomeboy1 ~]# hostname server
[root@handsomeboy1 ~]# bash
[root@server ~]#  ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.43.134  netmask 255.255.255.0  broadcast 192.168.43.255
        inet6 fe80::792f:d024:3150:cf1d  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:39:c8:59  txqueuelen 1000  (Ethernet)
        RX packets 596521  bytes 853526819 (813.9 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 284209  bytes 17465397 (16.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  1. 在server上更改其监听端口,然后再client上远程登录
[root@server ~]# vim /etc/ssh/sshd_config 
[root@server ~]# systemctl restart sshd
[root@server ~]# sshd -t               //检测ssh配置文件是否有问题

在这里插入图片描述
client:

[root@client ~]# ssh root@192.168.43.134
ssh: connect to host 192.168.43.134 port 22: Connection refused
## 由于我将监听端口改了,这里登录就会提示错误
[root@client ~]# ssh root@192.168.43.134 -p 22222         //选择监听端口登录
The authenticity of host '[192.168.43.134]:22222 ([192.168.43.134]:22222)' can't be established.
ECDSA key fingerprint is SHA256:G4jGohs1sfhoMuJpM0FY5/ufm07Ja9r1KD/FJXPYB+0.
ECDSA key fingerprint is MD5:b7:6e:0f:c0:f4:96:39:6b:dc:44:6f:ee:2f:20:6c:3a.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[192.168.43.134]:22222' (ECDSA) to the list of known hosts.
root@192.168.43.134's password:       //这里输入server端root的密码
Last login: Thu Apr  1 19:13:16 2021 from 192.168.43.1
[root@server ~]# 
  1. 由上面的图片,可以看到server上最大认证输入次数为6(就是远程登录允许输入密码的次数),我们在server上远程登录client测试
[root@server ~]# ssh root@192.168.43.130       //这里注意,上面改的是client的监听端口,server的没变,这里就不需要指定端口登录
The authenticity of host '192.168.43.130 (192.168.43.130)' can't be established.
ECDSA key fingerprint is SHA256:eovMAnt+xfqaf1Ctf+g9n4fvwFWVIGDSt7XPmuFFiu0.
ECDSA key fingerprint is MD5:45:53:86:7b:00:cd:f0:d6:a6:49:a5:e0:de:ec:44:15.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.43.130' (ECDSA) to the list of known hosts.
root@192.168.43.130's password:                //一次
Permission denied, please try again.            //两次
root@192.168.43.130's password: 
Permission denied, please try again.
root@192.168.43.130's password:                //三次
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).

发现实际只能输错密码三次,因为在linux中服务端ssh默认最大认证次数为6,但是客户端的最大允许登录为3次,两个匹配最后只能输错三次密码

[root@server ~]# ssh -o NumberOfPasswordPrompts=8 root@192.168.43.130     
####远程登录并给予一个最大登录次数为8
root@192.168.43.130's password: 
Permission denied, please try again.
root@192.168.43.130's password: 
Permission denied, please try again.
root@192.168.43.130's password: 
Permission denied, please try again.
root@192.168.43.130's password: 
Permission denied, please try again.
root@192.168.43.130's password: 
Permission denied, please try again.
root@192.168.43.130's password: 
Received disconnect from 192.168.43.130 port 22:2: Too many authentication failures
Authentication failed.

我们给它一个最大登录次数8次,会发现结果只能输错密码6次,这是因为此时server端ssh配置文件中最大认证次数为6,只能认证6次密码登录

  1. 添加黑白名单,白名单存在时只能该名单内的远程登录,黑名单存在时该名单内的不能远程登录,两个名单同时存在时以黑名单为主
[root@client ~]# vim /etc/ssh/sshd_config 

在这里插入图片描述

  1. 设置免密登录
[root@client ~]# ssh-keygen            //先生成公钥,后面可以加-t跟算法,自己选择算法
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:4B+ipfoIG6srIEPYgWwdq+ogz7dfRHbqqcPH8iVMPcM root@client
The key's randomart image is:
+---[RSA 2048]----+
|.....            |
|.o...            |
|o. o  . o .      |
|..o  . + =       |
|..    + S E      |
|=    + B o o     |
|O.  o. .B .      |
|=B o. +ooo       |
|Bo=oooo=.        |
+----[SHA256]-----+
[root@client ~]# ls -a
.                .bash_logout   .cache   .dbus          initial-setup-ks.cfg  .tcshrc      公共  图片  音乐
..               .bash_profile  .config  .esd_auth      .local                .viminfo     模板  文档  桌面
anaconda-ks.cfg  .bashrc        .cshrc   .ICEauthority  .ssh                  .Xauthority  视频  下载
[root@client ~]# cd .ssh
[root@client .ssh]# ls
id_rsa  id_rsa.pub  known_hosts
#### id_rsa为私钥     id_rsa.pub为公钥    known_hosts相当于远程登录后的日志记录信息
[root@client .ssh]# ssh-copy-id -p 22222  root@192.168.43.134    
#### 将公钥推送给server,注意前面更改过端口为22222
/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 inaistalled
/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@192.168.43.134's password:          //输入server端root的密码

Number of key(s) added: 1

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

在server上查看推送过来的公钥

[root@server ~]# cd .ssh
[root@server .ssh]# ls
authorized_keys  known_hosts
[root@server .ssh]# cat authorized_keys   //此文件记录推送过来的公钥
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDSX1/fLRIIchYKNiIwTva4BrB+Xd+1ZAzk0tg/qkGRpWKOp9UPPPyZ16HPYjCbN0/Eyqulb2IiK9F7esjgovRxzMu4TmEGjV3ELU919k+yQ9EsEGOoYVo8F501Rjn6cPoj/MRF9cS0HRp/a0WCse85LE1mqXBXcSHp5bbi/TN2ZtuML68m9TqVwY3cEtcaC8QCgjf2ArLSd/MAnhc01pJbk1iH4YHokHJHLtqOT1EgMDXEzyTPEEM9N+qn7MAs7PSEuglX8oUmMl6mkLFI/iTC8z7mvWfjUAsb9DO1+dd8XdN05VIFR0vKdF73Bg4V9vgQUZ1dVISSJuB0hbN+2ZKr root@client   

再次在client端远程登录server

[root@client .ssh]# ssh -p 22222 root@192.168.43.134     //下面就不需要密码了
Last login: Tue May 25 15:36:18 2021 from 192.168.43.1
  1. scp、sftp:不同linux系统间安全复制文件
    先分别在client端/root下创建一个文件client.txt,server端/root下创建一个server.txt文件
[root@client ~]# ls
anaconda-ks.cfg  client.txt  initial-setup-ks.cfg  公共  模板  视频  图片  文档  下载  音乐  桌面
[root@server ~]# ls
anaconda-ks.cfg  initial-setup-ks.cfg  server.txt  公共  模板  视频  图片  文档  下载  音乐  桌面

scp命令:
在client端使用scp命令将client.txt文件复制到server端:

[root@client ~]# scp -P 22222 client.txt root@192.168.43.134:/root
#### 这里注意,scp命令指定端口的选项是-P(大写) ,如果是复制目录,在scp后面加-rp即可
client.txt                           100%    0     0.0KB/s   00:00   

在server端/root里查看

[root@server ~]# ls
anaconda-ks.cfg  client.txt  initial-setup-ks.cfg  server.txt  公共  模板  视频  图片  文档  下载  音乐  桌面
#### client.txt已复制过来

在client端上也可以用scp命令将server端的文件复制过来

[root@client ~]# scp -P 22222 root@192.168.43.134:/root/server.txt /root
server.txt                                                                          100%    0     0.0KB/s   00:00    
[root@client ~]# ls
anaconda-ks.cfg  client.txt  initial-setup-ks.cfg  server.txt  公共  模板  视频  图片  文档  下载  音乐  桌面

sftp命令:
在client端使用sftp命令:

[root@client ~]# sftp -P 22222 root@192.168.43.134     //会进入一个交互界面
Connected to 192.168.43.134.
sftp> 
sftp> 
sftp> ls    //这里ls查看的是server端的当前目录下的内容
anaconda-ks.cfg        client.txt             initial-setup-ks.cfg   server.txt             下载                 
公共                 图片                 文档                 桌面                 模板                 
视频                 音乐                 
sftp> lls   //前面加l表示查看本client端当前目录下的内容
anaconda-ks.cfg  client.txt  initial-setup-ks.cfg  server.txt  公共  模板  视频  图片  文档  下载  音乐  桌面
sftp> cd /home
sftp> pwd
Remote working directory: /home
sftp> lpwd
Local working directory: /root

可以先在server端创建一个文件88,在client端创建一个文件77

[root@server ~]# touch 88

然后再client端使用sftp命令查看

sftp> cd /root
sftp> ls
88                     anaconda-ks.cfg        client.txt             initial-setup-ks.cfg   server.txt             
下载      公共       图片      文档      桌面       模板       视频       音乐 
sftp> cd /root
sftp> get 88                     //从server端下载88文件
Fetching /root/88 to 88
sftp> lls
77 88  anaconda-ks.cfg  client.txt  initial-setup-ks.cfg  server.txt  公共  模板  
视频  图片  文档  下载  音乐   桌面
sftp> put 77                     //将client端的77文件上传到server上
Uploading 77 to /root/77
77                                          100%    0     0.0KB/s   00:00    
sftp> ls
77                     88                     anaconda-ks.cfg        client.txt             initial-setup-ks.cfg   
server.txt          下载                 公共                 图片                 文档                 
桌面                 模板                 视频                 音乐  
sftp> exit                       //退出交互模式

TCP Wrappers访问控制策略

概述:对客户端的访问请求进行过滤控制

保护机制实现方式

  • 通过tcpd程序对其他服务程序进行包装
  • 由其它服务程序调用libwrap.so.*链接库
    配置文件
 - /etc/host.allow      //设置允许访问
 - /etc/host.deny       //设置不允许访问
 ####两个文件同时存在时,先匹配allow文件中的内容再匹配deny文件

设置访问控制策略

  • 策略格式:服务程序列表:客户端地址列表
  • 服务程序列表
  • 多个服务以逗号分隔,ALL表示所有服务 客户端地址列表
  • 多个地址以逗号分隔,ALL表示所有地址
  • 允许使用通配符?和*,网段地址,如192.168.4.或者192.168.4.0/255.255.255.0
  • 区域地址,如.benet.com
[root@handsomeboy1 ~]# vim /etc/hosts.allow  
#### 在文件中添加内容:     
sshd,ALL                   //代表允许所有访问
sshd,:192.168.43.134       //代表允许该IP地址的客户端访问
sshd,:192.168.43.          //代表允许192.168.43.0这个网段访问
sshd,:192.168.43.*         //也是代表整个43网段的
sshd,:192.168.43.4?        //?只是代表一个字符,这里就表示40-49
[root@handsomeboy1 ~]# ldd /usr/sbin/sshd | grep libwrap      //可以查看libwrap中是否有TCP Wrappers支持或阻挡sshd服务的功能
	libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f8aab67f000)

以上是关于linux----SSH远程访问及控制!的主要内容,如果未能解决你的问题,请参考以下文章

linux——ssh远程访问,密钥的生成以及公钥的使用,上传与下载

Linux SSH密码暴力破解技术及攻击实战

suse linux ssh远程无法访问问题

Linux SSH 远程登录错误及解决办法 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

Sonatype Nexus Repository Manager版本3.14.2访问控制缺失及远程代码执行漏洞

Linux远程访问及控制