ssh密钥验证
SSH远程管理服务SSH是一种安全通道协议,住哟啊用来实现字符界面的远程登陆,远程复制等功能SSH协议对通信双方的数据进行了加密处理,其中包括用户登陆时输入的用户口令。因此SSH协议具有很好的安全性。SSH客户端:Putty,Xshall,CRTSSH服务端:OpenSSHOpenssh是实现SSH协议的开源软件项目,适用于各种UNIX,Linux操作系统。我们正在使用的centos7系统已经默认
ssh密钥验证
SSH远程管理服务
1,定义
-
SSH是一种安全通道协议,是用来实现字符界面的远程登陆,远程复制等功能的,我们日常生活可以使用该功能来进行远程操控,省去了很多麻烦。
-
SSH协议对通信双方的数据进行了加密处理,其中包括用户登陆时输入的用户口令。因此SSH协议具有很好的安全性。
2,SSH支持的客户端和服务端
- SSH客户端:Putty,Xshall,CRT
- SSH服务端:OpenSSH
3,配置文件
-
我们正在使用的centos7系统已经默认安装openssh相关的软件包,并且已经将sshd服务添加为开机自启。
-
执行“systemctl start sshd”命令即可启动sshd服务
-
sshd服务默认使用的是TCP的22端口
-
sshd服务的默认配置文件为/etc/ssh/sshd_config
注:ssh_config和sshd_config都是ssh服务器的配置文件前者是
针对客户端的配置文件,后者则是针对服务器的配置文件下面是sshd_config的重要配置
Port 22 #监听端口22
ListenAddress 0.0.0.0 #监听地址为任意网段,也可以指定OpenSSH服务器的具体IP
LoginGraceTime 2m #登陆验证时间为2分钟
PermitRootLogin no #禁止root用户登录
MaxAuthTries 6 #最大重试次数为6
PermitEmptyPasswords no #禁止空密码用户登录
UseDNS no #禁止DNS反向解析,以提高服务器的响应速度
示例
#只允许zhaohua,muzi,用户登录,且其中muzi用户仅能够从ip地址为192.168.199.30的主机远程登陆
AllowUsers zhaohua muzi@192.168.199.30 #多个用户以空格分离
#禁止某些用户登录,用法和Allowusers类似(不要同时使用)
Denyusers zhaohua
SSHD服务验证
两种验证方式
1.密码验证
最基本的对服务器中本地系统用户的登录名称,密码进行验证。非常简单,但容易被破解。所以我们不推荐如此使用。
2.密钥对验证
要求提供相匹配的密钥信息才能通过验证。通过先在客户端中创建一对密钥文件(公钥,私钥),然后将公钥文件放到服务器中的之的指定位置。远程登陆时,系统将公钥,私钥进行加密,解密关联验证。能增强安全性,并且还可以免交互登录。
公钥和私钥的关系
- 公钥和私钥是成双成对的,这两个密钥互不相同,可以互相加密和解密。
- 不能根据一个密钥来推算出另一个密钥
- 公钥对外公开,私钥只有私钥的持有人才知道
当我们密码验证和密钥对验证都开启时,优先使用密钥对验证。当然,我们也可以根据实际情况来进行设置验证方式。
1.开启密钥和密码验证
PasswordAuthentication yes #启用密码验证
PubkeyAuthentication yes #启用密钥对验证
AuthorizedKeysFile .ssh/authorized_keys #指定公钥库文件
2.使用SSH客户端程序
1,ssh远程登陆
当用户第一次登陆SSH服务器时,必须接受服务器发来的的ECDSA密钥(根据提示输入“yes”)然后再输入密码,验证成功就可以登录了。
命令
ssh 用户@IP地址
例: ssh root@192.168.199.20
-p :指定非默认的端口号,缺省时默认使用22端口
3.scp远程复制
- 下行复制
命令
scp root@192.168.199.20:/etc/locale.conf /root/sshfuzhi.txt
scp -r root@192.168.199.20:/etc/lvm /root/sshfuzhi.txt #复制目录时需加-r,表示递归复制
- 上行复制
命令
scp -r /etc/ssh/ root@192.168.199.20:/opt
sftp(安全ftp)
因为ssh使用了加密和解密技术,所以安全性比普通的FTP要高,但是传输速率要更低。
命令
sftp root@192.168.199.20 #登录到root@192.168.199.20
sftp> get [-r] 文件或目录 文件保存位置(可缺省,缺省时代表复制到当前目录) #当要传输目录时,需要加入-r代表递归复制 ,将远程主机的文件下载到我们的主机上
sftp>put [-r] #将我们本机的文件,上传到远程主机上
首先,我们先要登录到远程主机上面;
登陆后,我们可以利用ls查看对方的目录,或者直接进行传输,将对方的an文件传输到我们的opt目录。
或者使用put指令,将我们主机上面的文件传输到对方主机
上传之后我们可以进行查询,看看是否传输成功。
或者我们可以指定接收目录,将我们的文件传输到该目录
配置密钥对验证
1,在客户端创建密钥对
- 通过ssh-keygen工具为当前用户创建密钥对文件。可用的加密算法为RSA,ECDSA或DSA等(ssh-keygen命令的“-t”选项用于指定算法类型)
可以先建立一个admin用户
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: #确认输入
2.查看密钥位置
在配置完密钥对之后,我们可以进行查看密钥对来确认,密钥对存放于.ssh中,通过以下命令可以进行查看
ls -l ~/.ssh/id_ecdsa*
-rw------- 1 admin admin 314 12月 9 15:10 /home/admin/.ssh/id_ecdsa
-rw-r--r-- 1 admin admin 189 12月 9 15:10 /home/admin/.ssh/id_ecdsa.pub
3.查看公钥文本
cat authorized_keys #这时已经在.ssh/目录下了,所以使用相对路径
4.将公钥文件上传至服务器并且导入
后面我们就应该将公钥导入服务器中,让服务器与客户端进行配对
ssh-copy-id -i id_ecdsa.pub zhao@192.168.199.30 #可以直接在服务器的/home/zhao/.ssh/目录中导入公钥文本
5.最后进行密钥验证登录
ssh zhao@192.168.199.30 #使用密钥对验证
Enter passphrase for key '/home/admin/.ssh/id_ecdsa': #输入私钥的密码
TCP Wrapper(访问控制)
定义
- 将TCP服务程序“包裹”起来,代为监听TCP服务程序的端口,增加了一个安全检测的过程,外来的连接请求必须先通过这层安全检测,获得许可后才能真正访问对应的服务程序。
- 对于大多是的Linux发行版来说,TCP Wrappers 是默认提供的共嗯那个。
TCP Wrapper保护机制的两种实现方式
- 1,直接使用tcpd程序对其他服务程序进行保护,需要运行tcpd程序
- 2,由其他网络服务程序调用libwrap.so.*链接库,不需要运行tcpd程序。此方式的应用更加广泛,也更有效率。
TCP Wrapper的格式
<服务程序列表>:<客户端地址列表>
(1)服务程序列表
ALL:代表所有的服务。
单个服务程序:如“vsftpd"。
多个服务程序组成的列表:如"vsftpd,sshd"。
(2)客户端地址列表
ALL:代表任何客户端地址。
LOCAL:代表本机地址。
多个地址以逗号分隔
允许使用通配符“*”和“?”,前者代表任意长度字符,后者仅代表一个字符
网段地址,如“192.168.199.”或者192.168.199.0/255.255.255.0
区域地址,如".benet.com”匹配benet.com域中的所有主机。
TCP wrappers 机制的基本原则:
基本策略
- 首先检查/etc/hosts.allow文件,如果找到相匹配的策略,则允许访问;
- 否则继续检查/etc/hosts.deny文件,如果找到相匹配的策略,则拒绝访问;
- 如果检查上述两个文件都找不到相匹配的策略,则允许访问。
常用情况
- "允许所有,拒绝个别”
只需在/etc/ hosts.deny文件中添加相应的拒绝策略 - ”允许个别,拒绝所有”
除了在/etc/hosts.allow中添加允许策略之外,还需要在/etc/hosts.deny文件中设置""ALL:ALL"的拒绝策略。
示例
比如我们在192.168.199.0网段中,我们只想让192.168.199.20访问192.168.199.30,需要做如下设置
先在/etc/hosts.allow设置只允许20IP通过
然后再在/etc/ hosts.deny中不允许所有网段通过
之后我们就发现10IP已经无法进入了,但20IP还是可以进入。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)