SSH简介:
SSH是一种安全通道协议,主要用来实现字符界面的远程登录,远程复制等功能;ssh协议对通信双方的数据传输进行了加密处理,,其中包含用户登录时输入的用户口令。与telnet等应用相比,ssh协议提供了更好的安全性。Openssh:ssh协议的开源实现
配置openssh服务器端:
ssh服务是“C/S”架构的,C代表客户端,S代表服务端。在安装linux系统是openssh服务默认已经安装
ssh服务及配置文件:
Openssh-service:服务端软件
Openssh-clients:客户端软件
要保证这两个包都安装才行
启动:service sshd start
配置文件:/etc/ssh/sshd_config
配置项:
Port22:port代表监听的端口,默认为22,可自行修改
ListenA ddress0.0.0.0:监听的ip地址,默认为所有,可修改
Protocol 2:代表的是ssh的第二个版本
LoginGraceTime 2m:输入用户名后,2分钟不能输入密码自动关闭
PermintRootLogin yes:是否允许root登录,yes允许,no不允许
MaxAuthTries 6:最大的认证次数,就是输入密码次数
RSAAuthentication yes:启用RSA算法认证
PubkeyAuthentication yes:启用公钥认证
AuthorizedkeysFile:.ssh/authorized_keys 公钥存放位置,在对应用户的家目录下面.ssh隐藏目录中,名字为authorized_keys文件
PasswordAuthentication yes:密码认证
PermitEmptyPasseords no:是否允许空密码登录
限制可登录用户的配置:
AllowUsers 用户名。。。:白名单
DenyUsers 用户名:黑名单
AllowGroups:组白名单
DenyGroups:组黑名单
登录验证方法:
sshd服务支持两种验证方法:密码验证、秘钥对验证,可以只设置其中一种方式,也可以两种方式都启用
密码验证:以服务器中本地系统用户的登录名称、密码进行验证,这种方式使用最为简便,但以客户机的角度来看,正在连接的服务器有可能被假冒,从服务器的角度来看,当遇到密码穷举(暴力破解)攻击时,防御能力比较弱。
秘钥对验证:要求提供相匹配的秘钥信息才能通过验证
ssh远程登录命令:ssh [用户名@]ip地址 [-p端口号]
选项:
-p:指明端口号
远程复制:scp
用法:scp [选项] [用户名@]ip地址:/要复制到的目的地/
或:scp [选项] /要复制东西的位置/ [用户名@]:ip地址 /要复制到哪
选项:
-C:压缩数据流
-r:递归复制
-p:保持原文件的修改时间、访问时间和访问权限
-P 端口号:指明远程主机监听的端口
去对方主机拿东西:scp 用户名@ip地址:/对方存放的位置 /存放在哪里
远程复制:rsync 会检查内容并覆盖
用法:rsync -av /复制那个目录 用户名@ip地址:/复制到哪里(复制目录和目录下文件)
或:rsync -av /复制那个目录/ 用户名@IP地址:/复制到哪里(只复制目录下的文件)
选项:
-a:所有
-n:模拟复制过程
-v:显示详细过程
-r:递归复制目录树
-p:保留权限
-t:保留时间戳
-g:保留组信息
-o:保留所有者信息
允许实现对远程系统经验证加密安全访问,当用户远程连接ssh服务器时会复制ssh服务器/etc/ssh/ssh_host*key.pub文件中的公钥到客户机~./ssh/know_hosts中。下次连接时,会比较两处是否有不同
基于key认证:
在服务器客户端中构建秘钥对验证ssh的基本过程
第一步:创建秘钥对:
公钥文件:id_rsa.pub
私钥文件:id_rsa
第二步:上传公钥文件id_rsa.pub到服务器中
第三步:导入公钥信息
公钥库文件:~/.ssh/authorized_keys(此文件的权限必须为600)
第四步:使用秘钥对方式验证
具体实现两种方式:
第一种方式:(麻烦)
使用zhangsan用户连接ssh服务器的lisi用户
第一步:在客户端创建密钥对
切换用户:su - zhangsan
创建密钥对:ssh-keygen -t rsa [-b 2048]
第二步:上传密钥
切换目录:cd /home/zhangsan/.ssh
上传密钥:scp id_rsa.pub 用户名@ip地址:/上传到的目录
第三步:在ssh服务器中设置
切换用户:su - lisi
用lisi用用户创建:mkdir .ssh
切换目录:cd /tmp
导入库文件:cat id_rsa.pub> /home/lisi/.ssh/authorized_keys
修改权限:chmod 600 /home/lisi/.ssh/authorized_keys(.ssh目录权限700)
第四步:在客户端登录验证
以lisi用户登录看是否免密:ssh 用户名@ip地址
第二种:(简单)
使用zhangsan用户连接ssh服务器的lisi用户
第一步:在客户端创建密钥对
切换用户:su - zhangsan
创建密钥对:ssh-keygen -t rsa [-b 2048]
第二步:直接导入公钥到lisi用户家目录中
导入公钥:ssh-copy-id -i id_rsa.pub 用户名@ip地址
输入lisi用户密码:
查看是否成功
第三步:在客户端验证
验证:ssh 用户名@ip地址
SSH服务最佳实践:
1、不要使用默认端口
2、禁止使用protocol version 1
3、限制可登录用户
4、设定空闲会话超时时长
5、利用防火墙设置ssh访问策略
6、仅监听特定的ip地址
7、基于口令认证时,使用强密码策略
8、使用基于密钥认证
9、禁止使用空密码
10、禁止使用root用户直接登录
11、限制ssh的访问频度和并发在线数
12、做好日志,经常分析
sudo的用途:
Sudo能够授权指定用户在指定主机上运行某命令。如果未授权用户尝试使用sudo,会提示联系管理员。sudo可以提供日志,记录每个用户使用sudo操作。sudo为系统管理员提供配置文件,允许联系管理员集中管理用户的使用权限和使用的主机。sudo使用时间戳文件来完成类似“检票”的系统。默认存活期为5分钟的“入场券”
编辑配置文件:visudo
选项:
-c:检查语法
配置文件:/etc/sudoers,/etc/sudoers.d/
日志文件:/var/log/secure
配置文件支持使用通配符glob:
?:匹配单个字符
*:匹配任意长度字符
[wxc]:匹配其中一个字符
[^wxc]:匹配除括号内的字符
\x:转义
[[:alpha:]]:字母
!:排除
使用方法:sudo [参数] [授权命令]
参数:
-u 用户名:以指定的用户身份运行命令
-l:查看当前用户可以执行的命令
-v:更新用户的时间戳而不执行命令
-V:显示sudo的版本信息
配置文件格式:
使用visudo命令或执行vim /etc/sudoers 打开配置文件
文件记录格式:
用户 主机名列表=(代表用户)命令程序列表
ALL:代表所有
NOPASSWD: 免密
用户:运行命令者的身份
主机列表:通过哪些主机
代表用户:以哪个用户的身份
命令程序列表:运行哪些命令
注意:如果只授权用户登录本机执行命令,主机写本地ip即可
别名设置:
别名有四中类型:
User_Alias:用户别名
Runas_Alias:代表用户别名
Host_Alias:主机别名
Cmmd_Alias:命令别名
用法: User_Alias 别名(大写)=用户名。。。
也可以将用户加入到组里面进行统一管理,组名前要加%
用法:%组名 主机名=代表用户 命令程序