一、ssh
配置文件
机器作为服务器端时:/etc/ssh/ssh_config
机器作为客户端时:/etc/ssh/ssh_config
默认监听端口:22
常用命令
ssh 用户名@远程主机ip地址(远程主机ip地址可替换为远程“主机名”,需要在客户端本地做域名解析)
ssh 用户名@远程主机ip地址 执行命令(不需要远程登录主机即可实现操作)
ssh -X 用户名@远程主机ip地址(调用X11图形化转发协议,支持远程打开图形化软件)
ssh -p 端口号 用户名@远程主机ip地址(如果远程主机的ssh服务监听的并不是22端口,可以使用-p选项指定端口登录) “netstat -tunlp | grep sshd 查看ssh服务监听端口”
二、配置文件参数
#号开头表示默认配置 #空格表示文本注释信息
#Port 22 指定监听端口
#AddressFamily any 指定使用哪种地址类型,取值范围:any、inet(仅ipv4)、inet6(仅ipv6)
#ListenAddress 0.0.0.0 指定监听地址,默认监听所有地址
#ListenAddress ::HostKey /etc/ssh/ssh_host_rsa_key 默认使用,兼容性最好
HostKey /etc/ssh/ssh_host_dsa_key 有安全问题,已不再使用
HostKey /etc/ssh/ssh_host_ecdsa_key 不推荐使用
HostKey /etc/ssh/ssh_host_ed25518_key 兼容性不太好,安全性高私钥文件存放位置
扩展学习-数字证书
签名:对于使用公钥加密后的内容做hash计算得到一个hash值,再将这个hash值加密(签名)和内容一起发出去;客户端解密得到hash值和内容,对内容重新计算一次hash值,与服务端发送过来的hash值进行对比,来确认内容没有被修改过
数字证书包含的内容:证书发布机构、证书有效期、公钥、证书所有者、签名及其使用的算法
指纹和指纹算法:根据指纹算法(一个hash算法)计算整个证书的hash值,这个值就是指
纹,用于保证证书的完整性,没有在传输过程中被修改
对称加密算法:DES、3DES、AES
非对称加密算法:RSA DH
hash算法:使用hash算法得出的不可逆的值,证明证书或者内容的完整性,如MD5值校验
为什么需要数字证书:
1)不论对称加密或非对称加密,都需要将公钥发给对端,公钥直接暴露在互联网中! 假如黑客获取到服务端的公钥,服务端以私钥加密的内容,被黑客截取后,就能解密出来。
2)证书保证了公钥的安全
数字证书的交互过程:
客户发起访问请求-----》服务端向客户端发送自己的数字证书------》客户端读取证书中的发布机构名称(明文存储于数字证书中),客户端在系统中从受信的发布机构列表中找到该证书的公钥,对服务端发送过来的证书指纹进行解密,再对服务端的数字证书使用相同的指纹算法计算,把计算的结果通服务端发送过来的指纹对比,如果一致说明证书在传输过程中未被修改且服务端可信------》后续流程为非对称加密流程
#RekeyLimit default none 禁用了ssh会话在认证时间超时后重新进行密钥交换动作
#SyslogFacility AUTH 指定sshd进程日志信息的存储位置
SyslogFacility AUTHPRIV
AUTHPRIV参数在/etc/rsyslog.conf配置文件中被定义
/var/log/secure 记录服务器登录行为的日志文件,压力较大,可选择为sshd进程自定义一个日志文件(rsyslog为sshd进程提供采集日志服务)
#LogLevel INFO 控制日志的详细程度,筛选日志,参数选择:error、warning、info、debug
LoginGraceTime 2m 限制认证时限
PermitRootLogin yes 是否允许root账户登录
StrictModes yes 在接受客户端连接请求前,对用户主目录和相关的配置文件进行检查,建议配置为yes
MaxAuthTries 6 密码错误次数
MaxSessions 10 允许的最大连接并发数
AuthorizedKeysFile .ssh/authorized_keys 认证方式为密钥认证时,本地公钥的存放文件位置
#PubkeyAuthentication yes 是否允许公钥认证,仅用于ssh-2
#AuthorizedPrincipalsFile none 不重要
#AuthorizedKeysCommand none
#AuthorizedKeysCommandUser nobody#HostbasedAuthentication no 基于主机的身份验证方法,在centos7中默认关闭,通过检查远程主机的名称以及从该主机发起连接的用户名来验证用户身份
# HostbasedAuthentication
#IgnoreUserKnownHosts no 选项为no,意思是客户端在进行ssh连接时,不要忽略用户的~/.ssh/known_hosts(服务端公钥存放文件)
#IgnoreRhosts yes 这一行用于指示SSH客户端和服务端忽略所有的rhosts文件(Rhosts指~home/.rhosts,该文件每行配置格式为 “远程主机名A 远程主机用户B” ,作用为允许该主机A上的该用户B无需密码即可远程到服务端,rhosts文件放在哪个用户的家目录下,远程到服务端时,就继承这个用户的权限------安全性低,centos7中默认禁用#PasswordAuthentication yes 使用密码认证
#PermitEmptyPasswords no 禁用空密码登录
PasswordAuthentication yes 此条配置生效,上面的同样配置被注释,不生效
#ChallengeResponseAuthentication yes
ChallengeResponseAuthentication no 禁用基于挑战应答的认证方式,此认证方式具有安全风险,centos7中默认禁用#KerberosAuthentication no kerberos认证相关选项
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no
#KerberosUseKuserok yes扩展学习-kerberos:网络认证协议,提供第三方可信的认证服务;逻辑架构中包含三个角色:KDC-负责发放原始票据和服务票据的中心服务器,Client-客户端,Service-服务端;KDC包含AS服务、TGS服务。
原始票据:用于客户端向KDC端证明自己的身份
服务票据:是KDC端发放给客户端的;用于客户端与服务端进行交互,客户端向服务端证明自己身份的票据。
大概的交互流程:访问开始前,默认KDC和Client端有一个独属于他们的共享密钥,KDC和Service端有一个独属于他们的共享密钥,
1)client需要先向KDC中的AS服务发送自己的身份信息(用户名、用户地址)申请原始票据,KDC使用K-C共享密钥将票据加密发给client端,client端使用共享密钥解密该票据,从而获得票据;此时client端被允许进行kerberos验证;
2)client端将原始票据和想要请求的服务信息发给KDC,KDC中的TGS服务为C-S两端生成一个会话密钥(SK),用于服务器验证客户端,并将这个会话密钥和客户端之前发送过来的身份信息一起包装为一个票据(服务票据),使用K-S共享密钥进行加密,通过client发给server;
发给client的东西大概是经过这些加密过程
3)client需要将这个服务票据发给服务端,但它并不知道K-S共享密钥,所以无法修改票据信息。clinet使用K-C密钥解密出会话密钥,再将自己的信息打包后用会话密钥加密发给service,这时客户端发给服务端2个东西:K-S加密的票据、会话密钥加密的用户信息
4)服务器使用K-S共享密钥解密得到票据信息,从而获得用户信息(1)和会话密钥,使用会话密钥解密客户端发过来的用户信息(2),将1和2进行比较,从而验证client的身份
# GSSAPI options
GSSAPIAuthentication yes
GSSAPICleanupCredentials no
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no
#GSSAPIEnablek5users noGSSAPI 通用安全服务应用程序接口,以通用方式为调用者提供安全服务的框架;提供了一种标准化的方式,使得应用程序可以使用各种安全机制来进行身份验证;我理解在两种不同系统之间提供一个互相相信的安全通道,进行数据传送
UsePAM no 是否为sshd开启pam认证
#AllowAgentForwarding yes 是否开启代理转发
#AllowTcpForwarding yes 是否启用TCP转发
#GatewayPorts no ssh远程端口转发时,是否允许端口转发到本地
X11Forwarding yes 是否启用x11图形界面转发
#X11DisplayOffset 10
#X11UseLocalhost yes
#PermitTTY yes 允许从tty类型终端登录
#PrintMotd yes 设置系统启动时自动显示消息
#PrintLastLog yes 是否显示上次用户登录的信息
#TCPKeepAlive yes 一种检测机制,检测对端是否已经崩溃,且没有正常关闭TCP连接可以在/etc/sysctl.conf文件中设置TCP的KeepAlive参数
#UseLogin no 禁用老式的密码登录方式
#UsePrivilegeSeparation sandbox 启用特权分离功能,root用户允许在一个特权环境,非root用户允许在一个受限制的环境
#PermitUserEnvironment no 是否读取用户自定义的环境变量文件,文件路径:~/.ssh/environment
#Compression delayed
#ClientAliveInterval 0 指定服务器在没有收到客户端消息时在认证超时前的等待时间(秒)
#ClientAliveCountMax 3 指定服务器在判定客户端死亡并断开连接之前,向客户端发送检测请求的次数,这里配置为3,指3次检查后客户端仍未反应,则结束连接
#ShowPatchLevel no 在连接ssh端口时,是否返回ssh的补丁版本信息
#UseDNS yes 是否开启DNS服务,开启之后会导致ssh登录变慢,因为开启之后会涉及到域名正反向解析
#PidFile /var/run/sshd.pid 指定存放进程pid的文件路径
#MaxStartups 10:30:100 同时允许几个尚未登入的联机画面
#PermitTunnel no 控制ssh客户端是否允许隧道其他意思
#ChrootDirectory none chroot:一种安全机制,将进程的根目录更改为特定的目录,限制进程的访问权限
#VersionAddendum none#Banner none 指定具体的文件路径,存放成功登录服务器的提示语
AcceptEnv LANG LC_CTYPE(语言符号及其分类) LC_NUMERIC(数字) LC_TIME(时间显示格式) LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
指定客户端发送的哪些环境变量将会被传递到会话环境中LC_all > LC_*>LC_LANG 配置文件当中的优先级对比
配置文件 /etc/local.conf
上述一些变量的作用;如LC_TIME变量,能修更改date命令的输出格式
显示格式由英文变为中文,export命令只是暂时生效,想要永久生效,需要将命令添加到用户得~/.bashrc或~/.bash_profile
全局配置变量文件:/etc/profile,/etc/bashrc,~/.bash_profile,~/.bashrc,登录时触发的变量文件顺序从左到右,定义这个变量触发顺序的作用,即可以为一些用户自定义特殊的环境变量
举例:
将a=10写入/etc/bashrc或/etc/profile变量文件中,此时在root用户的环境下,a=10
将a=20 写入xws1用户家目录下的.bashrc文件
切换到xws1用户,此时在xws1用户环境下a=20
Subsystem sftp /usr/libexec/openssh/sftp-server
#Match User anoncvs
本文禁止用于谋利途径!!!!转载请注明出处,以上全部内容为个人纯手敲学习记录并分享,肯定会有一些错误理解,切莫用于生产环境!!!