SSH远程控制管理
SSH(secure shell)是一种安全通道协议,主要用来实现字符界面的远程登陆、远程复制等功能。
SSH协议对通信双方的数据进行了加密处理,其中包括用户登录时输入的用户口令。因此SSH协议具有很好的安全性。
TELNET协议对通信双方的数据不进行了加密处理,容易信息泄露。
SSH客户端:putty、Xshell、CRT
SSH服务端:OpenSSH
openssh 是实现ssh协议的开源软件项目,适用于各种Linux、unix操作系统。
centos 7系统默认已安装openssh相关软件包,并将sshd服务添加为开机自启动。
shhd服务默认使用TCP的22号端口号
shhd默认配置文件在 /etc/ssh/sshd_config
[root@localhost ~]# vim /etc/ssh/sshd_config //进入ssh服务端的配置文件
Port 22 //监听端口22
ListenAddress 0.0.0.0 //监听地址为任意网段,也可以指定openSSH服务器的具体IP
LoginGraceTime 2m //登陆验证时间为两分钟
PermitRootLogin no //禁止root
MaxAuthTries 6 //最大重试次数为6
PermitEmptyPasswords no //禁止root用户登录
UseDNS no //不能使用域名解析
实验:禁止root用户登录
先进入服务端配置文件 vim /etc/ssh/sshd_config
systemctl restart sshd //重启sshd服务
用远程主机连接服务端root用户
被拒绝连接
密码输错6次被拒绝连接
修改端口号则不是一个端口号不能登录 vim /etc/ssh/sshd_config
查看用户登录服务端失败的信息并且禁用这个用户从某个IP登录(白名单、黑名单)
黑名单添加配置:DenyUsers 用户名@禁止登录的IP地址
白名单配置:AllowUsers 用户名@禁止登录的IP地址 (可不添加IP地址)
DenyUsers 用户名 限制主机从任何ip登录
cat /etc/var/log/secure |grep Failed //过滤出登陆失败的日志文件
进入 vim /etc/ssh/sshd_config 添加配置
DenyUsers hj@192.168.10.1 //禁止用户hj在192.168.10.1上登录服务端
DenyUsers 用户名@禁止登录的IP地址
systemctl restart sshd //重启服务
sshd服务支持的两种验证方式
1.密码验证:对于服务器中本地系统用户的登录名称、密码进行验证。简便但可能会被暴力破解。
2.密钥对验证:要求提供相匹配的密钥信息才能通过验证,通常现在客户端中创建一对密钥文件(公钥、私钥),然后将公钥放到服务器中指定位置。远程登录时,系统将公钥、私钥进行加密/解密关联验证。能增强安全性,且可以免交互登录。
公钥和私钥的关系:
1.公钥和私钥是成对生成的,这两个密钥互不相同,可以互相加密解密。
2.不能根据一个密钥推算出另一个密钥。
3.公钥对外开放,私钥只有私钥持有的人才能知道。
当密码验证、密钥对验证都启用时,服务器将优先使用密钥对验证。
vim /etc/ssh/sshd_config
PubkeyAuthentication yes //启用密钥对验证
PasswordAuthentication yes //启用密码验证
AuthorizedKeysFile .ssh/authorized_keys //指定公钥库文件
使用ssh客户端程序
1.ssh 远程登录
如果对方的端口号发生了改变则要 ssh -p 端口号 用户@192.168.10.100
ssh [选项] hj@192.168.10.100
当用户第一次登陆ssh服务器时,必须接收服务器发来的ECDSA密钥,根据提示输入“yes”后才能验证。接收到的密钥信息将保存到 ~/.ssh/known_hosts文件中(主机ssh登陆过的服务器都将存在这个文件中)。密码验证成功后将登陆到目标服务器的命令环境中。
centos2 192.168.10.23
centos1 192.168.10.100
centos3 192.168.10.21
[root@localhost /]# ssh root@192.168.10.21
The authenticity of host '192.168.10.21 (192.168.10.21)' can't be established.
ECDSA key fingerprint is SHA256:quJaQbiWGEk3mBOdEni+uEU1mvIfZgTjn1+vVQz8RQk.
ECDSA key fingerprint is MD5:4c:b2:20:04:66:94:a2:1d:71:18:e2:6d:62:eb:c9:f1.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.10.21' (ECDSA) to the list of known hosts.
root@192.168.10.21's password:
Last login: Wed Aug 17 21:00:03 2022 from 192.168.10.1
centos1中会多出一个.ssh
现在已经在centos3主机中了
[root@localhost ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.10.21 netmask 255.255.255.0 broadcast 192.168.10.25
scp远程复制
下行复制:scp 文件名 root@192.168.10.100:保存到的路径(将远程主机中的文件复制到本机)
如果端口号不一致 scp -P 文件名 对方主机@IP:保存到的路径
复制目录: scp -r 目录 root@ip:目标路径(可跟多个目录空格相隔)
若目录较深可用`pwd`
上行复制:scp 本机文件 root@IP:目标主机路径
配置 密钥对验证
要求提供相匹配的密钥信息才能通过验证。通常先在客户端中创建一对密钥文件(公钥、私钥),然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用公钥、私钥进行加密/解密关联验证。能增强安全性,且可以免交互登录。
当密码验证、密钥对验证都启用时,服务器将优先使用密钥对验证。可根据实际情况设置验证方式。
vim /etc/ssh/sshd_config
PasswordAuthentication yes #启用密码验证
PubkeyAuthentication yes #启用密钥对验证
AuthorizedKeysFile .ssh/authorized_keys #指定公钥库文件
在客户端创建密钥对
通过ssh-keygen工具为当前用户创建密钥对文件。可用的加密算法为RSA、ECDSA或DSA等(ssh-keygen命令的“-t”选项用于指定算法类型)。
useradd admin
echo "123123" | passwd --stdin admin
su - admin
ssh-keygen -t ecdsa
Generating public/private ecdsa key pair.
Enter file in which to save the key (/home/admin/.ssh/id_ecdsa): #指定私钥位置,直接回车使用默认位置
Created directory '/home/admin/.ssh'. #生成的私钥、公钥文件默认存放在宿主目录中的隐藏目录.ssh/下
Enter passphrase (empty for no passphrase): #设置私钥的密码
Enter same passphrase again: #确认输入ls -l .ssh/id_ecdsa*#id_ecdsa是私钥文件,权限默认为600;id_ecdsa.pub是公钥文件,用来提供给 SSH 服务器
把公钥文件导到ssh服务端
- 手动 :复制客户端公钥文件 id_rsa.pub的内容,在服务端 用户的家目录中的 .ssh目录中创建 authorized_keys文件并把客户端公钥文件内容粘贴到这个文件中
- 自动 :在客户端 ssh-copy-id -i 公钥文件 用户@服务端 IP
手动
[root@localhost /]# ssh-copy-id root@192.168.10.23
在客户端使用:[ssh 用户@服务端IP] 登录服务端,使用密钥对私钥的密码进行验证
[root@localhost .ssh]# ssh 192.168.10.23
在客户机设置ssh代理功能,实现免交互登录
ssh-agent bash
ssh-add
Enter passphrase for /home/admin/.ssh/id_ecdsa: #输入私钥的密码ssh zhangsan@192.168.80.10
TCP Wrappers 访问控制
TCP_Wrappers是一个工作在第四层(传输层)的的安全工具,对有状态连接的特定服务进行安全检测并实现访问控制,凡是包含有libwrap.so库文件的的程序就可以受TCP_Wrappers的安全控制。它的主要功能就是控制谁可以访问,常见的程序有rpcbind、vsftpd、sshd,telnet。
工作原理
TCP_Wrappers有一个TCP的守护进程叫作tcpd。以ssh为例,每当有ssh的连接请求时,tcpd即会截获请求,先读取系统管理员所设置的访问控制文件,符合要求,则会把这次连接原封不动的转给真正的ssh进程,由ssh完成后续工作;如果这次连接发起的ip不符合访问控制文件中的设置,则会中断连接请求,拒绝提供ssh服务。
TCP_Wrappers的使用
TCP_Wrappers的使用主要是依靠两个配置文件/etc/hosts.allow
, /etc/hosts.deny
,用于拒绝和接受具有TCP_Wrappers控制全的程序。
要说明的是当我们启动一个受控制的软件的时候,比如ssh,不过在刚开始的时候,/etc/hosts.allow,
/etc/hosts.deny
什么都没有添加,此时没有限制,是都可以连接的,现在我们来说如何设置,禁止和允许连接,配置文件格式遵循如下规则:
首先先检查/etc/hosts.allow文件,如果找到相匹配的策略,则允许访问;
否则继续检查/etc/hosts.deny文件,如果找到相匹配的策略,则拒绝访问;
如果都找不到相匹配的策略,则允许访问。
实验:
我以三台虚拟机作示例
centos2 192.168.10.23
centos1 192.168.10.100
centos3 192.168.10.21
示例1:我的centOS 1想拒绝centOS 2的ssh访问
首先在centOS 1 配置文件/etc/hosts.deny中修改
[root@localhost ~]# vim /etc/hosts.deny
sshd:192.168.10.23
在centos 2中远程控制centos 1,提示不能控制
[root@localhost ~]# ssh 192.168.10.100
ssh_exchange_identification: read: Connection reset by peer
在cents 3中可登入
[root@localhost ~]# ssh 192.168.10.100
root@192.168.10.100's password:
Last login: Wed Aug 17 20:27:07 2022 from 192.168.10.1
exit登出
示例二:我的centOS 1想拒绝所有主机的ssh访问
centos 1配置
[root@localhost ~]# vim /etc/hosts.deny
sshd:ALL
这就意味着我们使用ssh,或者telnetd访问这个机器都是无法访问的
[root@localhost ~]# ssh 192.168.10.100
ssh_exchange_identification: read: Connection reset by peer
示例三:我的centOS 1想拒绝所有机器的ssh访问,除了centos 2
centos 1配置
[root@localhost ~]# vim /etc/hosts.deny
sshd:ALL
[root@localhost ~]# vim /etc/hosts.allow
sshd:192.168.10.23
centos 2 可以登入
[root@localhost ~]# ssh 192.168.10.100
root@192.168.10.100's password:
Last failed login: Wed Aug 17 21:17:36 CST 2022 from 192.168.10.23 on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Wed Aug 17 21:13:57 2022 from 192.168.10.23
centos 3 不能登入
[root@localhost ~]# ssh 192.168.10.100
ssh_exchange_identification: read: Connection reset by peer
<服务程序列表>:<客户端地址列表>
(1)服务程序列表
ALL:代表所有的服务。
单个服务程序:如“vsftpd"-
多个服务程序组成的列衣:如"vsftpd, sshd"。(2)客户端地址列表
ALL:代表任何客户端地址。LOCAL:代表本机地址。
多个地址以逗号分隔
允许使用通配符“”和“?”,前者代表任意长度字符,后者仅代表一个字符网段地址,如“192.168.10.100”或者192.168.10.0/255.255.255.0
区域地址,如".benet.com"匹配 benet.com域中的所有主机。
补充:ssh 192.168.10.100默认当前用户
ssh hj 192.168.10.100 指定hj用户