SSH
一、OpenSSH服务器
1. SSH(Secure Shell)协议
- 是一种安全通道协议
- 对通信数据进行了加密处理,用于远程管理
2.OpenSSH服务
- 服务名称:sshd
- 服务端主程序:/usr/sbin/sshd
- 服务端配置文件:/etc/ssh/sshd_config
3.用户登录控制
-
禁用root用户、空密码用户
-
限制登录验证时间、重试次数
-
AllowUsers、DenyUsers
vi /etc/ssh/sshd_config #进入编辑
LoginGraceTime 2m #限定密码登录的访问时间
如别人用SSH远程访问,2分钟没有输入密码就
会显示超时
PermitRootLogin no #不允许root账号登录,Yes是允许,默认是Yes
MaxAuthTries 6 #最大尝试密码的次数是6次,超过6次服务器会断开
PermitEmptyPasswords no #不允许空密码登录
........
AllowUsers jerry admin@61.23.24.25 #白名单
jerry、admin:只允许这2个用户访问
61.23.24.25:客户机的IP
注:AllowUsers 白名单、DenyUsers 黑名单,两个不能同时使用
3.1白名单项目实施
-
先进ssh
vi /etc/ssh/sshd_config
按大G到文件的最后一行,小o从光标处所在行之下插入一个新行内容
输入AllowUsers lisi zhangsan@20.0.0.15客户机的IP(指定被远程的客户机IP地址)
wq保存退出
2. 重启sshd服务
systemctl restart sshd #重启sshd服务
创建白名单允许的访问的用户
useradd lisi
passwd lisi
123123
useradd zhangsan
passwd zhangsan
123123
3. 然后去白名单指定的客户机ip地址的机器上测试是否可以用SSH远程到本机的账户
ssh lisi@20.0.0.14 -p 22 #使用ssh登录要登录的客户机ip地址
whoami #表示我是谁
exit #登出
3.2黑名单项目实施
-
先进ssh
vi /etc/ssh/sshd_config 改为 DenyUsers lisi@20.0.0.15 #把lisi放入黑名单,20.0.0.15这个客户机是ssh远程 不上本机 (20.0.0.14)的lisi账户的
-
测试
上面已经把lisi账户放入黑名单,用20.0.0.14的ip的客户机用ssh远程本机(20.0.0.15)的lisi账户 是远程不上的,连续输入3次密码不管是否正确,最后都会返回为客户机的初始账户。
-
客户机远程本机登录账户,除本机黑名单意外的账户,其他账户都可以远程通过
ssh zhangsan@20.0.0.14 #登录20.0.0.14机器的zhangsan账户 exit #退出
4.登录验证方式
登录验证方式
密码验证:核对用户明、密码是否匹配
密钥对验证:核对客户的私钥、服务端公钥是否匹配
密钥分为:公钥与私钥
公钥:大家都可以有这个钥匙,解的是私钥锁
私钥:私钥解的是公钥的锁
-
生成密钥对的过程
ssh-keygen -t rsa #生成密钥的方式 ls -lh #只能查看到没有加密、没有隐藏的文件是可以看到的 ls -lah #可以查看到加密、隐藏的文件 cd .ssh/ #进入.ssh目录 ls -lah #查看.ssh目录中的文件 会生成两条文件,第一条是私钥,第二条是公钥
- 数据加密
- 发送方使用接收方的公钥加密数据
- 接收方使用自已的私钥解密数据
- 数据加密能保证所发送数据的机密性
- 数字签名
- 对原始数据执行HASH算法得到摘要值
- 发送方用自已私钥加密摘要值
- 将加密的摘要值与原始数据发送给接收方
注:数字签名保证数据完整性、身份验证和不可否认
二、使用SSH客户端程序
1. ssh命令
用途:远程安全登录、端口选项:-p 22
格式:ssh user@host
ssh root@20.0.0.15
yes
20.0.0.15的root密码:123456
whoami #查看本身是谁
ifconfig #查看本身是哪个IP地址
2. scp命令
用途:远程安全复制
格式1:scp user@host:file1 file2
格式2:scp file1 user@host:file2
//格式1
echo "abc123" >a.txt #本地生成一个a.txt文件
scp /root/a.txt root@20.0.0.15:/opt #把本地的root目录下的a.txt文件拷贝到用户
名为root的20.0.0.15ip地址的opt目录下
2.1. 在20.0.0.15的opt目录下创建文件信息,然后在去20.0.0.14上下载20.0.0.15的文件
// 格式2
scp root@20.0.0.15:/opt/1 /root #拷贝20.0.0.15上的root账户下opt目录下的1文件,拷贝
到本机的root目录下
3. sftp命令
用途:安全FTP上下载
格式:sftp user@host
注:sftp访问的都是文件的家目录
sftp root@20.0.0.15 #登录上20.0.0.15这个用户的家目录
3.1. 在服务器上创建文件
cd /home/fa #进入家目录
touch ky07 #创建一个ky07文件
3.2 在客户机上测试
sftp fa@20.0.0.15 #sftp访问20.0.0.15的fa目录,访问进去直接进的是fa的家目录
三、构建密钥对验证的SSH体系
-
在客户机中创建密钥对
[zhangsan@server2 ~]$ ssh-keygen -t ecdsa 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 #公钥文件位置
-
将公钥文件上传至服务器
[zhangsan@localhost ~]$ scp ~/.ssh/id_ ecdsa.pub root@172.16.16.22:/tmp 拷贝 公钥文件位置 到root用户ip地址的tmp目录下
-
在服务器中导入公钥文本
mkdir /home/lisi/.ssh/ #以mkdir的形式创建lisi,lisi是本身存在的 cat /tmp/id_ecdsa.put >> /home/lisi/.ssh/authorized_keys #把公钥文件的内容追加到lisi的.ssh目录的authorized_keys文件下 tail -1 /home/lisi/.ssh/authorized_keys #查看文件内容最后一行
-
客户端使用密钥对验证登录
[zhangsan@localhost ~]$ ssh lisi@172.16.16.22 #登录到lisi的家目录下 [lisi@localhost ~]$ whoami lisi
项目操作
-
在客户机上创建用户
useradd wangwu #创建用户 passwd wangwu #设置密码
-
生成密钥
[root@server1 ~]# su zhangwe #切换到wangwu用户 [zhangwe@server1 root]$ ssh-keygen -t rsa #生成密钥的过程 [zhangwe@server1 root]$ ls -lah #查看,权限不够 [zhangwe@server1 root]$ exit #退出
-
添加到组内,提升权限
sudo /usr/bin/ls -lah #授权 cd /home/wangwu ls -lah #查看所有文件包括有密码的,隐藏的文件
-
查看生成的密钥文件
-
将公钥文件上传至服务器
scp id_rsa.pub root@20.0.0.15:/tmp #拷贝公钥到root用户的客户机ip地址是20.0.0.15的 tmp目录下
- 在服务器(20.0.0.15)上去查看
-
把文件拷贝到用户lisi上
先创建用户lisi,目录
在服务器上[root@server3 tmp]# useradd lisi #创建用户 [root@server3 tmp]# mkdir /home/lisi/.ssh #创建目录 [root@server3 tmp]# cat id_rsa.pub >> /home/lisi/.ssh/authorized_keys #追加文件内容 [root@server3 tmp]# cat /home/lisi/.ssh/authorized_keys #查看文件是否存在
-
测试
客户机(20.0.0.14)远程登录服务器(20.0.0.15)
客户端使用密钥对验证登录ssh lisi@20.0.0.15 #用ssh远程登录服务器