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)非对称加密:采用公开密钥和私有密钥两种密钥加密,两种密钥成对生成,可以互相加密解密,公钥对外公开,私钥只有持有人才知道
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
- 在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 ~]#
- 由上面的图片,可以看到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次密码登录
- 添加黑白名单,白名单存在时只能该名单内的远程登录,黑名单存在时该名单内的不能远程登录,两个名单同时存在时以黑名单为主
[root@client ~]# vim /etc/ssh/sshd_config
- 设置免密登录
[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
- 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 远程登录错误及解决办法 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!