一、SSH远程管理
- 终端:接受用户的指令
- TTY终端
- 虚拟终端
- ssh:22,加密
- telnet:23,不加密
- 解释器:shell
SSH(Secure Shel)是一种安全通道协议,主要用来实现字符界面的远程登录、远程复制等功能,SSH 协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令
1、配置OpenSSH服务端
#服务端
[root@localhost ~]# setenforce 0 //关闭selinux内核机制
[root@localhost ~]# systemctl stop firewalld //更改端口号时要么关闭防火墙,要么修改策略
[root@localhost ~]# vim /etc/ssh/sshd_config //打开sshd的配置文件
修改
Port 22 ##监听的端口
ListenAddress 192.168.10.10 ##监听的IP地址
Protocol 2 ##ssh的v2版本
UseDNS no ##禁用dns反向解析
[root@localhost ~]# systemctl restart sshd
备注:当客户端第一次连接服务端时,会提示确认记录指纹密钥保存到本机,会在你的客户端隐藏 .ssh 文件中生成 known_hosts 文件
2、用户控制登录
#服务端
[root@localhost ~]# vi /etc/ssh/sshd_config
修改
LoginGraceTime 2m ##允许一次登录花费登陆验证的时间
PermitRootLogin yes ##为了后面的实验,不禁用root
MaxAuthTries 6 ##登陆次数(输错密码的次数)
PermitEmptyPasswords no ##禁止空密码用户登录
[root@localhost ~]# ssh -o NumberOfPasswordPrompts=6 192.168.10.101 //想要尝试密码的次数
#如果只允许或禁止某些用户登录时,可以使用AllowUsers或DenyUsers配置
AllowUsers zhangsan aaa lisi@192.168.10.20 ##多个用户以空格分开,添加。lisi只能从10.20登陆
[root@localhost ~]# systemctl restart sshd
3、登录验证方式
#sshd 服务支持两种验证方式--密码验证、密钥对验证,可以设置只使用其中一种方式,也可以两种方式都启用
[root@localhost ~]# vi /etc/ssh/sshd_config
#PubkeyAuthentication yes //启用密钥对验证
......
AuthorizedKeysFile .ssh/authorized keys //指定公钥库文件
......
#PasswordAuthentication yes //启用密码验证
[root@localhost ~]# systemctl restart sshd
二、使用ssh客户端程序
1、命令程序ssh、scp、sftp
1)、ssh远程登录
客户端操作
[root@localhost ~]# ssh aaa@192.168.10.10
... //接受秘钥
aaa@192.168.10.10's password: //输入密码
[aaa@localhost ~]$ whoami //确认当前用户
[aaa@localhost ~]$ ifconfig ens33 | grep "inet " //确认当前主机地址(引号内有空格)
#如果 sshd 服务器使用了非默认的端口号(如 2345),则在登录时必须通过“-p”选项指定端口号
[root@localhost ~]# ssh -p 2345 aaa@192.168.10.10
2)、scp远程复制
[root@localhost ~]# scp 192.168.10.10:/opt/aaa /root ##下载,在AllowUsers中添加root
[root@localhost ~]# scp -o port 8888 192.168.10.10:/root/aaa /opt/111 ##服务端更改端口的情况下下载
#root@192.168.10.10's password: //密码
[root@localhost ~]# scp aaa 192.168.10.101:/root ##上传
[root@localhost ~]# scp -P 8888 /opt/111 192.168.10.101:/root ##服务端更改端口的情况下上传
root@192.168.10.10's password: //密码
3)、sftp安全FTP
[root@localhost ~]# sftp 192.168.10.101
192.168.10.101's password: //输入密码
sftp> put profile ##上传到了宿主目录下,普通用户只能将数据上传到宿主目录,
root可以上传到其他地方直接用cd切换目录
sftp> get profile ##下载,下载到当前位置
sftp> get profile /opt/profile ##下载指定位置
sftp> bye //退出登录
#如果远程服务器修改了端口号,可用下列方法登录sftp
[root@localhost ~]# sftp -o port=8888 root@192.168.10.101
备注:如果不想打上更改的端口号可以修改客户端的ssh_config配置文件找到#Prot 22,去掉#号,然后更改为和服务端一样的端口号
4)、lrzsz上传下载
##服务端
[root@localhost ~]# yum -y install lrzsz
##可以直接拉取文件到xshell
[root@localhost ~]# rz ##上传
[root@localhost ~]# sz 指定文件 ##下载
三、构建密钥对验证ssh体系(方法一)
1、在客户端创建密钥对
[root@localhost ~]# ssh-keygen -t rsa ##创建密钥
Generating public/private ecdsa key pair.
Enter file in which to save the key (/home/zhangsan/.ssh/id ecdsa): //指定私钥位置
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 ecdsa.
Your public key has been saved in /home/zhangsan/.ssh/id ecdsa.pub.
The key fingerprint is:
......
[root@localhost ~]# cd .ssh //确认生成的密钥文件
[root@localhost ~]# ls
id_rsa id_rsa_pub known_hosts
2、将公钥文件上传至服务器
##第一种将公钥文件复制到服务器,服务器端创建.ssh
[root@localhost ~]# mkdir .ssh
##客户端cat之前创建好的id_rsa_pub,查看内容
[root@localhost ~]# cd .ssh
[root@localhost .ssh]# ssh-copy-id 192.168.10.101
3、在服务器中导入公钥文本
[root@localhost ~]# useradd aaa
[root@localhost ~]# passwd aaa
[root@localhost ~]# mkdir -p /home/aaa/.ssh/ ##想登陆谁的账号,就导入到谁里面
[root@localhost ~]# cat /tmp/id_rsa.pub >> /home/aaa/.ssh/authorized_keys
[root@localhost ~]# tail -l /home/aaa/.ssh/authorized_keys
...
[root@localhost ~]# ls -l /home/aaa/.ssh/authorized_keys
4、在客户端使用密钥对验证
[bbb@localhost root]$ ssh aaa@192.168.10.10 ##在服务器上allowusers中要添加aaa账号
[aaa@localhost ~]$ ifconfig
#查看服务器中目标用户lisi的公钥数据库如下
[aaa@localhost ~]$ ls -l /home/aaa/.ssh/authorized_keys
[aaa@localhost ~]$ tail -l /home/aaa/.ssh/authorized_keys
[aaa@localhost ~]$ exit
四、免密登录(方法二)
##免密登录,不设置私钥短语
[root@localhost ~]# ssh-keygen -t rsa
[root@localhost ~]# yum -y install openssh-clients
[root@localhost ~]# ssh-copy-id root@192.168.10.101
五、TCP Wrappers访问控制 (TCP封装)
/etc/hosts.allow和/etc/hosts.deny设置
格式相同:<服务程序列表>;<客户端地址列表>
例添加
sshd:192.168.10.101 192.168.20.*
sshd:ALL
- 服务程序列表
- ALL:代表所有的服务
- 单个服务程序:如“vsftpd”
- 多个服务程序组成的列表:如“vsftpd,sshd”
- 客户端地址列表
- ALL:代表任何客户端地址
- LOCAL:代表本机地址
-
- 单个|P 地址:如“192.168.4.4”
- 网络段地址:如“192.168.4.0/255.255.255.0”
- 以“.”开始的域名:如“.bdgn.com"匹配 bdgn.com 域中的所有主机
- 以“”结束的网络地址:如“192.168.4.”匹配整个 192.168.4.0/24 网段
- 嵌入通配符“”“?”:前者代表任意长度字符,后者仅代表一个字符,如“10.0.8.2”匹配以 10.0.8.2 开头的所有 IP 地址。不可与以“”开始或结束的模式混用
- 多个客户端地址组成的列表:如“192.168.1.,172.16.16.,.bdqn.com”