Linux内的邮件服务:postfix,监听端口smtp 25端口
DDOS攻击:泛洪攻击,flood,能够在短时间内发送大量的TCP包攻击网站,使得网站的连接数(承受并发)过高,瘫痪
--->拒绝服务
查看selinux的状态:getenforce
disabled或者是Enforcing
3A认证安全:认证、授权、审计
磁盘加密:阿里云ECS的系统盘加密
常见加密算法:
1.DES,3DES,数据加密标准(data encyption standard)---56位
2.AES,高级加密算法---128、192位
对称加密不是很安全,但是加密速率高(不需要自己的公钥发来发去),适合加密大量的数据TB PB级别。加密传输数据等
DES,AES,3DES等
用私钥加密,要用公钥解密(类似gitlab验证,ssh-key验证都是将私钥保留,将公钥发送给对端主机,然后我ssh连接的时候,是通过我自己的私钥去解密的),解密自己的连接(解密自己的数据包)
因为只有公钥可以对Alice的私钥解密--->确认数据来源为Alice。因为gitlab有ssh的公钥了,能解析ssh发来的私钥加密包,一般的网站验证都是用RSA认证
公钥的作用:一般都是用于解密私钥的请求的
RSA算法:公钥加密算法,著名的公钥加密算法
一般的https算法,用的是RSA+AES算法的结合,网页端https加密
RSA加密算法的效率比较低,加密大量数据的速度慢
ssh协议使用的就是rsa加密算法,把pub公钥发送到各个主机或者是gitlab,jenkins等,完成主机的身份验证
数据--->hash算法--->hash值
如果源数据相同,比如说都是同一个文件(文件内容一致),那么经过hash算法的hash值也一样,确认文件内容一致;如果文件内容不一致,则hash值完全不同
MD5算法,sha1算法已经被破解,md5加密还可以临时的用于判断文件是否被修改等,比较md5sum加密值或者其他算法的加密值
常见算法:md5加密(hash值 128位--->显示的是32位的16进制),sha128(160位),sha256,sha512等算法
##各种算法 ##md5算法 md5sum + file ##使用md5算法计算出这个file的hash值 baf172378e0d27f555b95affa525307d 1+100.sh ##sha1算法,位数比md5要长(160位) sha1sum + file sha512sum file sha256sum file
sha512加密,128位的16进制数
暴力破解概念:一个个数字猜,比如算法内指定是大小写字母+数字,那么假如是16位的随机字符算法,一个字符就是26+26+10=56种,16位就是56^16,这么多次的猜测(暴力破解)
yum源加密gpgkey:用于检查来自yum源的包是否合法
这个gpgkey(公钥),这个yum源发布后,使用的yum源的私钥加密,那么gpgkey的公钥就可以解了,从而验证包来源的合法性
[base] name=CentOS-$releasever - Base #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra baseurl=https://repo.huaweicloud.com/centos/$releasever/os/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 ##这里是一个在Cent OS 7上面的gpgkey校验key
其实公钥也存在一个问题:如果有人冒充中间商截取A-B获取公钥的信息,从而发送一个假的公钥给到A的话(假冒B),那么A会将自己的真实信息用中间商的公钥加密,然后返回给中间商,从而泄露信息
混合对称算法和非对称算法,比如AES 128和sha256算法,类似互联网http访问的安全信息(AES+RSA)
流程加密:
1.原始data---对称加密(对称秘钥人人都有)---RSA加密,使用公钥B加密(类似gitlab的公钥B)
2.解密data:用私钥B解开公钥B,得到对称秘钥,在用对称秘钥解开data
实现数字签名(验证数据的合法性,是否是同一个文件),使用hash算法先进行加密得到hash值(唯一),在通过RSA算法公钥私钥加密
一般较常应用与pdf等加密文档,数字签名技术等(先hash再RSA)
1.data---hash算法:data的hash值---B的公钥加密
2.B的私钥解密---再用hash算法算一遍data的hash值---比较hash值,一样的即证明数据来源为合法的
权威机构颁发的证书,SSL证书,有效期一般是一年的有效期,也有证书颁发机构,CA机构
DV、OV等
证书类型:单域名、多域名、泛域名证书
CA签名
CA证书加密的原理:CA机构 作为靠谱的中间商,加入还是A向B请求信息,A发公钥给到CA,CA用自己的权威私钥给A的公钥加密,同时B有CA机构的公钥,和B的公钥,用B的公钥加密返回给B,B用私钥再解密
Chrome、edge等官方浏览器上受信任的根证书颁发机构,一般都存在于世界上,世界上的根证书颁发机构有不多,对应专门的证书企业
像这个暴雪的证书blizzard,暴雪也是一个根证书的颁发机构,自己给自己颁发证书:自签名证书,因为根机构已经是最高权限的机构了
CA证书包含的内容:签名算法sha256(RSA)、签名的hash算法(客户端验证证书的合法性,对比hash值),公钥算法RSA
自己购买的域名:www.cwjcloudtest.cn
域名颁发机构为DV(单域名免费版SSL证书),还有泛域名,多域名
根证书颁发机构:Digicert,在华为云上(或者是各大公有云厂商)上面都有
一般来说,在云厂商购买证书都涉及这几个参数:
1.证书类型:针对不同类型的企业、用途选择,同时价格也不一样,按照实际生产用途使用证书
2.证书品牌(根证书颁发机构):www.cwjcloudtest.cn选择的是digicert,华为云官网是globalsign,阿里云也是globalsign
3.域名类型:单域名、多域名、泛域名
4.有效期:一般都为1年
HTTPS的原理:CA就是为了将服务端的公钥变得有效,可靠,客户端访问的时候才能放心访问;而这个可靠来自于可靠的根证书颁发机构(CA)
目前主流使用:TLS 1.2版本的协议
保护WEB应用层的数据包,SSH协议包裹,SSH:安全套接字,加上SSL证书
1.客户端发起请求,请求访问某个服务器站点(url),访问443端口(其中站点必须放通443端口)
2.站点返回服务器的证书给到客户端,客户端验证证书的真实可靠性;如果有问题会提示安全/不安全/不受信任的证书,服务端发送公钥(证书)给到客户端
3.客户端验证成功,将加密信息给到服务器,用服务器的公钥加密
4.服务器用私钥解密信息,获取到传输的数据
企业内部使用生成SSL证书,自己生成就行;一般在互联网上申请的公共的CA,这个都是和根证书颁发机构申请的
开放源码的软件库包,用于生成私有的CA证书
每台Linux的机器,都是自带openssl服务的
##查看版本 openssl version
基本语法
##使用openssl技术对文件进行hash运算,得到唯一的hash值 [root@ecs-web01 ~]#openssl sha512 1.sh SHA512(1.sh)= 3c7db731a40a5ca38935f1b5868aed6f84f66678772a22b04b25a04d098e36f4a095b67d35ab1476769846a214978e030360b4fb67ad22f71b534781d17419df 等同于sha512sum 1.sh ##openssl生成密码,自动生成一串加密的密文,可能是版本不一样,生成密文的密码,对原来的密码加密 openssl passwd -6 caiweijia123 [root@localhost ~]#openssl passwd -6 123 $6$nq8pcEoJbqN7FLq3$aSwUOh/OtSxGP8N/yxGaLgD2hwsluDkU.qCQrN1fFgclesBlUOywUyqEqEtcgwO1ExRj8MqdA8Igj9NaDXBsz/ ##也可以使用openssl+密码输出密文 ##存储在/etc/shadow的就是sha512加密过的密文 catyer:$6$f63BKB2X09nKyqtf$Ipvckz1/eRXs5J/CFNvcCgcJJQFtyiuCiUx09Byej7FIfdjPuiiimYJe.iP6skoa.hawaX58PHcxzTLEFjZj80::0:99999:7:::
原理上,sha512是可以被解密的,但是需要花很长的时间,需要量子计算机才能解密,工具一般也不能解密
openssl可以生成密钥对,密钥对就指的是公钥+私钥,称为密钥对
生成一个服务的私钥
##生成一个私钥 openssl genrsa -out /key/app1.key cat /key/app1.key
给私钥加密(使用对称算法),因为非对称算法就是rsa,已经生成了密钥对了
使用aes算法加密的时候,需要输入一个密码(解密密码)--->但是不推荐,直接有私钥就行了
openssl genrsa -out /key/app2.key -aes128 ##-aes128表示使用什么对称算法进行加密
一些对称算法加密的方式:常用的一般为aes128 aes192 aes256等,需要在rsa的基础上再加一层加解密
使用ssh-keygen生成一个密钥对(本地生成),这个也是单纯的rsa算法,没有使用对称加密过
私钥的生成:随机数,就像k8s的token一样,临时生成一个token或者是生成一个永久的都行
这里没有再用aes加密,所以可以直接生成公钥的
-pubout需要加这个参数
openssl rsa -in /key/app1.key -pubout -out /key/app1.pub
根据aes加密过的私钥生成公钥,需要手动输入一个phrase来验证aes加密,解密
openssl rsa -in /key/app2.key -pubout -out /key/app2.pub
私有CA:一般都是企业内部使用,直接就是根证书,一般不存在什么1级证书2级证书等目录
其实企业内部可以生成多个CA证书的,自签名证书
一般存放的目录:/etc/pki下面
[root@ecs-web01 ~]#tree /etc/pki/CA /etc/pki/CA ├── certs ├── crl ├── newcerts └── private
默认的配置参数,生成CA证书得配置参数
其中需要注意:
1.自签名证书certificate:$dir/xxx.pem要和openssl req -new -x509 -key /etc/pki/CA/private/ca.pem -days 3650 -out /etc/pki/CA/ca-cert.pem ###这个路径是自签名证书---一致
2.自己的私钥:$dir/private要和openssl genrsa -out private/ca.pem一致
[root@master tls]#pwd /etc/pki/tls [root@master tls]#ls cert.pem certs ct_log_list.cnf misc openssl.cnf private ##一定需要match匹配的字段,这些字段都可以修改路径的 [ CA_default ] dir = /etc/pki/CA # 证书的根目录CA目录 certs = $dir/certs # CA下的certs,证书的存放位置,存放每个授予的证书 crl_dir = $dir/crl # Where the issued crl are kept database = $dir/index.txt # 数据库索引存放index.txt #unique_subject = no # Set to 'no' to allow creation of # several ctificates with same subject. new_certs_dir = $dir/newcerts # default place for new certs. certificate = $dir/ca-cert.pem # The CA certificate 这个是自己的自签名CA证书 serial = $dir/serial # The current serial number CA证书的序列号 crlnumber = $dir/crlnumber # the current crl number # must be commented out to leave a V1 CRL crl = $dir/crl.pem # The current CRL private_key = $dir/private/ca.pem #这个是自己的私钥 RANDFILE = $dir/private/.rand # private random number file x509_extensions = usr_cert # The extentions to add to the cert ##CA证书的属性 default_days = 365 # 有效期默认1年 default_crl_days= 30 # how long before next CRL default_md = sha256 # 默认RSA加密算法:sha256,可以修改 preserve = no # keep passed DN ordering ##自签名和颁发的证书所需要match的字段,所以说还是不能乱填的 [ policy_match ] countryName = match ##国家名字 stateOrProvinceName = match ##省份名 organizationName = match ##公司名 organizationalUnitName = optional commonName = supplied emailAddress = optional ##实验环境,暂时将这些修改为自定义optional [ policy_match ] countryName = optional stateOrProvinceName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional
1.生成CA需要的文件:两个文件
touch index.txt ##生成证书索引的数据库文件 echo 01 > serial ##颁发证书的序列号,这个序列号要是十六进制的,不能乱填 ls certs crl index.txt newcerts private serial
2.生成CA的私钥--->这个是自己的私钥
在7版本,6版本或者之前,生成一个文件默认的权限是644,需要修改下私钥的权限,或者直接chmod改一下600也可以
openssl genrsa -out private/ca.pem ll private/ca.pem -rw------- 1 root root 1679 Jul 9 10:44 private/ca.pem ##ca默认路径,只有拥有者root可以访问others都不可以访问 可能还得chmod 600一下:chmod 600 private/ca.pem
3.生成CA证书(自签名证书),根据私钥生成自签名证书
颁发者和授予者都是自己,自签名证书;
企业内部其实也可以随便填,但是需要知道你这个证书是干嘛的,什么name,可以根据业务来划分(nginx,k8s,mysql,tomcat等),在openssl.cnf文件上也不一定需要match
##生成CA证书自签名 openssl req -new -x509 -key /etc/pki/CA/private/ca.pem -days 3650 -out /etc/pki/CA/ca.pem ###这个路径是自签名证书 -x509:生成自签名的参数 -key:使用之前生成的私钥文件,写好路径 -days:指定使用年限:10年 -out:输出一个私钥(证书文件),.cert文件 [root@ecs-web01 CA]#openssl req -new -x509 -key /etc/pki/CA/private/ca.pem -days 3650 -out /etc/pki/CA/ca-cert.pem ----- ##自己的可以随便填,如果是企业内的话,最好是命名规范一点 Country Name (2 letter code) [XX]:CN ##填写国家代码,CN---中国 State or Province Name (full name) []:SZ ##填写省份 Locality Name (eg, city) [Default City]:SZ ##城市 Organization Name (eg, company) [Default Company Ltd]:catyer ##公司名 Organizational Unit Name (eg, section) []:catyu^H ##部门名称 Common Name (eg, your name or your server's hostname) []:catyer Email Address []:catyer@11.com ##证书的基本格式输出.cert,查看master节点的证书说明 ##关键参数:C=CN ST=GD O=CAT [root@master CA]#openssl x509 -in /etc/pki/CA/ca-cert.pem -noout -text Certificate: Data: Version: 3 (0x2) Serial Number: 88:fe:3b:bf:0c:8c:46:51 Signature Algorithm: sha256WithRSAEncryption Issuer: C=CN, ST=GD, L=SZ, O=CAT, OU=CAT, CN=CAT/emailAddress=cat Validity Not Before: Jul 9 03:11:33 2022 GMT Not After : Jul 6 03:11:33 2032 GMT Subject: C=CN, ST=GD, L=SZ, O=CAT, OU=CAT, CN=CAT/emailAddress=cat Subject Public Key Info:
在windows下查看这个新的证书.crt后缀,在windows环境下需要修改,但是提示是不受信任的证书
给到一个服务使用:需要
1.CA机构的自签名证书,ca.pem
2.服务的私钥,nginx.key:openssl genrsa -out nginx.key
3.服务的证书.crt:根据证书申请文件.csr申请.crt文件
前置条件:需要生成好CA的自签名证书,CA的私钥,并且规划好.pem的文件路径,写好文件路径
1.先生成一个服务的私钥
openssl genrsa -out /key/nginx.key
2.为需要生成证书的主机/服务生成证书申请文件,格式为.csr(申请文件)
openssl req -new -key /key/nginx.key -out /key/nginx.csr [root@master CA]#openssl req -new -key /key/nginx.key -out /key/nginx.csr Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:GD Locality Name (eg, city) [Default City]:SZ Organization Name (eg, company) [Default Company Ltd]:CAT
3.通过CA申请证书并且颁发给服务,有效期为365天
openssl ca -in /key/nginx.csr -out /etc/pki/CA/certs/nginx.crt -days 365 [root@master CA]#openssl ca -in /key/nginx.csr -out /etc/pki/CA/certs/nginx.crt -days 365 Using configuration from /etc/pki/tls/openssl.cnf Check that the request matches the signature Signature ok Certificate Details: Serial Number: 1 (0x1) Validity Not Before: Jul 9 04:25:34 2022 GMT Not After : Jul 9 04:25:34 2023 GMT ##有效期到2023年 Subject: countryName = CN ##基本的配置,一定要和CA机构的一致 stateOrProvinceName = SZ organizationName = CAT organizationalUnitName = CAT commonName = CAT emailAddress = CAT
4.生成完毕,查看证书的信息
证书文件格式:nginx.crt---/etc/pki/CA/certs/nginx.crt,其实就和CA机构的自签名证书ca.pem的格式是一致的,只不过现在是给到服务的证书
私钥文件格式:nginx.key---/key/nginx.key
也可以复制导出到windows桌面进行查看
openssl x509 -in /etc/pki/CA/certs/nginx.crt -noout -text [root@master CA]#openssl x509 -in /etc/pki/CA/certs/nginx.crt -noout -text Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha256WithRSAEncryption Issuer: C=CN, ST=SZ, L=SZ, O=CAT, OU=CAT, CN=CAT/emailAddress=CAT Validity Not Before: Jul 9 04:25:34 2022 GMT Not After : Jul 9 04:25:34 2023 GMT Subject: C=CN, ST=SZ, O=CAT, OU=CAT, CN=CAT/emailAddress=CAT Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) ##查看index索引:cat $dir/index.txt [root@master CA]#cat index/index.txt V 230709042534Z 01 unknown /C=CN/ST=SZ/O=CAT/OU=CAT/CN=CAT/emailAddress=CAT V 230709090134Z 02 unknown /C=CN/ST=CN/O=k8s/OU=k8s/CN=k8s/emailAddress=k8s ##查看serial序列号,现在变成02了,也就是下一个证书的编号是02 [root@master CA]#cat serial 02
某个证书泄漏了或者是不想用了,可以吊销证书,进入到newcerts,可以看到有01编号证书(nginx),02编号证书(k8s)
[root@master CA]#cd newcerts/ [root@master newcerts]#ls 01.pem 02.pem
吊销证书:openssl ca -revoke
吊销证书的状态:revoked(R状态)
openssl ca -revoke /etc/pki/CA/newcerts/01.pem ##可以看到,index序列已经变成r了,证明已经吊销 [root@master CA]#openssl ca -revoke /etc/pki/CA/newcerts/01.pem Using configuration from /etc/pki/tls/openssl.cnf Revoking Certificate 01. Data Base Updated [root@master CA]#cat index/index.txt R 230709042534Z 220709091050Z 01 unknown /C=CN/ST=SZ/O=CAT/OU=CAT/CN=CAT/emailAddress=CAT V 230709090134Z 02 unknown /C=CN/ST=CN/O=k8s/OU=k8s/CN=k8s/emailAddress=k8s
记录吊销证书的文件:culnumber,先更新这个文件的编号为01
echo 01 > crlnumber echo 01 > crlnumber/crlnumber
更新证书吊销列表
openssl ca -gencrl -out /etc/pki/CA/crl/crl.pem
查看crl文件
openssl crl -in /etc/pki/CA/crl/crl.pem [root@master CA]#openssl crl -in /etc/pki/CA/crl/crl.pem -noout -text Certificate Revocation List (CRL): Version 2 (0x1) Signature Algorithm: sha256WithRSAEncryption Issuer: /C=CN/ST=SZ/L=SZ/O=CAT/OU=CAT/CN=CAT/emailAddress=CAT Last Update: Jul 9 13:16:58 2022 GMT Next Update: Aug 8 13:16:58 2022 GMT CRL extensions: X509v3 CRL Number:
拷出来的K8s证书,k8s.crt
根本的流程还是调用/usr/bin/openssl证书来实现
##如果是生成自签名证书,则不用根CA;如果是需要根CA,则需要在CA上生成CA的私钥以及CA的证书 ##1.生成私钥 openssl genrsa -out /certs/nginx.key ##2.生成证书申请文件.csr openssl req -new -key /key/nginx.key -out /key/nginx.csr ##3.nginx服务申请证书 openssl ca -in /key/nginx.csr -out /etc/pki/CA/certs/nginx.crt ##4.查看证书 openssl x509 -in /etc/pki/CA/certs/nginx.crt -noout -text ##5.使用ssl证书 将证书配置到各个服务内,形成加密
进入到目录/etc/pki/tls/certs,make就可以了,基于Makefile这个文件(脚本)来实现的
可以在这里openssl genrsa去掉-aes128加密,就不用输入phrase密码了
生成各种各样的证书,也可以编写脚本来实现,不过需要实现交互式的openssl命令,这里还是得输入证书的信息
make nginx.crt ##私有CA颁发的证书 make nginx.key ##私钥,用于解密公钥 make nginx.csr ##证书申请文件csr make nginx.pem ##自签名证书
Cent OS 7执行创建.crt .key .pem等脚本
##进入指定目录创建,也可以openssl创建,mv到指定的目录存放 DIR=/key SER=nginx cd /etc/pki/tls/certs make $SER.crt make $SER.key make $SER.pem mv $SER.crt $SER.key $SER.pem $DIR if [ $? -eq 0 ];then echo "$SER.crt $SER.key $SER.pem 创建成功" fi ###生成私钥 #openssl genrsa -out /$DIR/$SER.key # ###生成证书申请文件 #openssl req -new -key /$DIR/$SER.key -out /$DIR/$SER.csr # ###生成证书 #openssl ca -in /$DIR/$DIR.csr -out /etc/pki/CA/certs/$SER.crt
用于连接远程主机,远程传输,远程操作等,openSSH服务默认安装的,安全的
通信过程:
1.ssh 192.168.244.132:首次连接确认是否是连接这台机器
2.确认,则将这台机器的公钥记录下来,下次连直接用公钥就行(对应算法)
3.下次直接使用密码
4.服务端也会获取到客户端的公钥,双方都有公钥,保证信息传输的安全性;服务端通过自己的私钥解密传输过来的公钥;客户端通过自己的私钥解密传过来的公钥
##主机IP,算法,公钥 192.168.244.132 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOf8Uo6Tm0vy+2g9ctYsTwc/tfWcXHQtY5EywK0odPY1KFdXvw/bi75eyTbBqMUnX90RY36V+SV2CF05KCP1FJ0= 192.168.244.133 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOf8Uo6Tm0vy+2g9ctYsTwc/tfWcXHQtY5EywK0odPY1KFdXvw/bi75eyTbBqMUnX90RY36V+SV2CF05KCP1FJ0=
手动添加pubkey到服务端的过程,会进行验证,验证成功后自动认证,不需要人工输入账密
需要自己生成公钥私钥(密钥对)
ssh-keygen:默认算法是rsa算法
[root@master script]#ssh-keygen --help unknown option -- - usage: ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa | rsa1] [-N new_passphrase] [-C comment] [-f output_keyfile] ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile] ssh-keygen -i [-m key_format] [-f input_keyfile] ssh-keygen -e [-m key_format] [-f input_keyfile] ##生成密钥对 ssh-keygen ##传输公钥 ##-p 1258表示用不同的SSH端口连接 scp -P 1258 root@192.168.244.132:/root ##--->这个是scp命令,ssh和scp的一个是小写p,一个是大写P ssh-copy-id root@192.168.244.132 在远端机器生成key,传输过来的rsa算法加密的公钥,在.ssh的authkey目录下,同时known_host会添加多一个已知的主机地址
原理:只要通过公钥验证就可以实现互访
思路:
1.在主机上先ssh-keygen生成自己的密钥对id_rsa和id_rsa.pub
2.ssh-copy-id root@192.168.244.128自己,生成自己的auth_key,自己生成了auth_key,known_host等文件
3.scp -r .ssh root@主机:将自己的.ssh目录复制到各个主机,那各个主机就可以识别到128这台主机了,同时各个主机也可以访问到128主机
如果远端机器修改了密码passwd,SSH还是可以连接的(基于key认证,基于公钥验证)
#!/bin/bash pass="123" cd /root rm -rf .ssh #host=`hostname -I` ##生成ssh-keygen expect <<EOF spawn ssh-keygen expect { "key" { send "\n"; exp_continue } "passphrase" { send "\n"; exp_continue } "same" { send "\n"; exp_continue } } EOF ##生成自己的auth_key expect <<EOF spawn ssh-copy-id root@192.168.244.128 expect { "yes/no" { send "yes\n"; exp_continue } "password" { send "$pass\n" } } expect eof EOF ##循环复制到各个主机 for i in {132..133};do expect <<EOF spawn scp -r .ssh root@192.168.244.$i:/root expect { "yes/no" { send "yes\n"; exp_continue } "password" { send "$pass\n" } } expect eof EOF if [ $? -eq 0 ];then echo "host 192.168.244.$i send success" fi done
sshpass:是ssh服务用于取消对每个主机的密码认证的服务,因为ssh 不能给连接的主机指定密码,可以指定明文密码
-p password:指定明文密码 -f file:可以跟记录密码的文件 -e:将环境变量SSHPASS作为密码
需要安装一下
rpm -qa | grep sshpass || yum -y install sshpass rpm -q sshpass
sshpass+expect的组合
StrictHostKeyChecking=no:表示不再询问yes还是no,默认yes,-i表示把公钥复制过去
ssh-keygen -P "" -f /root/.ssh/id_rsa &>/dev/null:默认的key
由于sshpass貌似不支持1258端口,所以复制到139.9.57.240还得靠expect
host=" 192.168.244.132 192.168.244.133 " pass1=123 pass2=Caiwj@1258! cd /root rm -rf .ssh ssh-keygen -P "" -f /root/.ssh/id_rsa &>/dev/null ##生成一个ssh-keygen的密钥对 rpm -q sshpass && echo "sshpass already install" || yum -y install sshpass for i in ${host};do sshpass -p $pass1 ssh-copy-id -o StrictHostKeyChecking=no -i /root/.ssh/id_rsa.pub $i # sshpass -p $pass1 ssh -o StrictHostKeyChecking=no $i "echo `hostname -I` >> /root/ip" ssh $i "echo `hostname -I`" done #sshpass -p $pass2 -o StrictHostKeyChecking=no -i /root/.ssh/id_rsa.pub 139.9.57.240 expect <<EOF spawn ssh-copy-id -p 1258 root@139.9.57.240 expect { "yes/no" {send "yes\n";exp_continue} "password" {send "Caiwj@1258!\n"} } expect eof EOF
常用参数
##源 目的主机,也可以从目的主机复制到本地 rsync -av /etc server1:/tmp rsync -av /server1:/tmp /etc -a:包含rsync大部分的功能 -v:显示过程 -u:如果复制过来的文件比较新,则直接覆盖 #/etc和/etc/的区别:/etc拷贝包括目录下所有的文件,/etc/拷贝/etc下的文件,不拷贝目录 ##区别 rsync -av f1 192.168.244.132:/data rsync -av f1/ 192.168.244.132:/data
拷贝data下的文件f1
##拷贝三个文件 rsync -av f1/ 192.168.244.132:/data sending incremental file list ./ f1.txt f2.txt f3.txt echo {1..10} >> f1/f1.txt ##对f1文件做一些改动 ##再次拷贝,发现只拷贝增量数据incremental,只拷贝有变化的文件f1.txt rsync -av f1/ 192.168.244.132:/data sending incremental file list f1.txt sent 41,138 bytes received 71,719 bytes 45,142.80 bytes/sec total size is 314,572,821 speedup is 2,787.36 ll total 307204 drwxr-xr-x 2 root root 48 Jul 9 23:26 f1 -rw-r--r-- 1 root root 104857621 Jul 9 23:28 f1.txt -rw-r--r-- 1 root root 104857600 Jul 9 23:26 f2.txt -rw-r--r-- 1 root root 104857600 Jul 9 23:26 f3.txt
rsync需要对不同的ssh端口用法:rsync -e "ssh -p 1258",前提是需要做好ssh密钥对认证
复制script下的所有文件,或者说是同步script下的所有文件到目标主机
date=`date +%F_%H` #scp -r -p -P 1258 /script/ root@139.9.57.240:/ &>/dev/null rsync -e "ssh -p 1258" -av /script/ root@139.9.57.240:/ if [ $? -eq 0 ];then echo "$date点传输成功" >> /script/scp/scp.txt fi ##写个crontab -e任务 * */1 * * * /bin/sh /script/scp/scp.sh
现在管理服务的总父进程:systemd进程,负责创建启动管理服务进程
lastb:查看you谁登录失败过
ssh服务端配置文件:/etc/ssh/sshd_config
#Port 22 #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress :: 端口配置,监听本地的IP地址,默认0.0.0.0为所有IP 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_ed25519_key 密钥对加密算法,一般是非对称加密算法rsa等
ss -nt:查看已经建立连接的服务,监听的是本地的地址192.168.244.128:22端口,远端的是客户端端口(建立连接的)
复制都是复制公钥给到目标端的主机,私钥不会复制出去,目标端的主机记录的也是公钥,最后的是主机名
然后只要有源端主机(master)的私钥,就可以远程免密连接到目标端(slave)
Ubuntu:默认关闭root登录,需要开启root用户登录
在生产中也可以禁止root用户登录
生产中一般是不给root权限的,因为权限太高很麻烦,如果是堡垒机就可以
管理员授权给到用户,用户具有管理员的权限,或者是执行某些command的权限
主配置文件:/etc/sudoers
vim /etc/sudoers
如果不对catyer授权,则会出现catyer不在授权用户范围的错误提示error
sudo -u username command:指令 ##基本格式 root ALL(在哪个主机)=(代表的用户,可以写root) ALL(COMMAND指令) #COMMAND指令需要写指令的完整路径,可以使用which来查看命令的路径which ls which cat which ls /usr/bin/cat root ALL=(ALL) ALL catyer ALL catyer ALL=(root) /usr/bin/ls 允许catyer用户执行ls /root命令 ##注意:配置文件必须要和实际执行的命令一致,也是一种管理权限的手段,可以使用root用户临时授权一下,可以指定指令,也可以指定all catyer ALL=(root) /usr/bin/ls /root,/usr/bin/mount /dev/sdb /mnt/mount catyer ALL=(root) usr/bin/mount ##授权某个命令,写命令路径即可,表示授权挂载命令,添加一个,即可授权多个command,不需要另起一行
catyer#sudo ls /root
一个账号之所以是管理员的原因:因为账号的pid=0,用id可以查看pid,$3就是pid的列
grep /bin/bash /etc/passwd
awk -F: '{print $1":"$3}' /etc/passwd:$1和$3之间可以指定一个分隔符
对应的目录:
/etc/pam.d
/etc/security
云服务器:云厂商机器内置的时间服务器,ntpserver
ntp.aliyun.com:阿里云的ntp服务器地址,不要使用ntp服务,不标准
ntpdate:只是一次性的时间同步,不是永久的同步
使用chrony服务:实现配置本地的ntp服务器
ntp服务器:自己既是服务端也是客户端,其实例如阿里云的ntp.aliyun.com这些服务器,也是基于国际的原子钟来进行时间同步的,同时NTP服务器又作为企业内网的NTP服务器(服务端)
通过NTP协议实现时间同步
yum info:可以查看yum源内的软件包信息
yum info ntp:查看ntp软件的信息
yum info chrony:查看chrony软件包的信息
chrony更好一点,效率比较高,精度比较高一些,可以达到微秒级别的精准度
查看软件是否安装:rpm -q chrony
rpm -q chrony chrony-3.2-2.el7.x86_64
服务名称:chronyd
systemctl status chronyd
默认开机启动+chronyd.service服务的方式运行
配置好后,重启一下chrony服务,类似nginx/mysqld服务一样,配置文件都在/etc/chrony.conf内
配置时间服务器
华为云:ntp.myhuaweicloud.com,server ntp.myhuaweicloud.com minpoll 4 maxpoll 10 iburst
阿里云:ntp.aliyun.com
腾讯云:time1.cloud.tencent.com
##添加iburst:可以加速同步 server ntp.myhuaweicloud.com iburst server ntp.aliyun.com iburst server time1.cloud.tencent.com iburst ntpdate ntp.aliyun.com##调整时间
作为云厂商的内部机器(内网机器),本身的ntp服务就在华为云内网,有一个内网服务地址可以使用,直接用ntp.huaweicloud.com(有内部服务地址100.125开头的)
就可以了,不存在断公网无法同步时间;如果是IDC机器则是需要连公网才能同步时间的