查看操作系统相关信息

1
2
uname -a    //查看到的是瞬态的(Tansient hostname)
cat /etc/redhat-release //查看操作系统环境

修改主机名

  • 静态的(Static hostname)

    “静态”主机名也称为内核主机名,是系统在启动时从/etc/hostname自动初始化的主机名。

  • 瞬态的(Tansient hostname)

    “瞬态”主机名是在系统运行时临时分配的主机名,例如,通过DHCP或mDNS服务器分配。

  • 灵活的(Pretty hostname)

    “灵活”主机名也有人叫做“别名”主机名。
    “灵活”主机名则允许使用自由形式(包括特殊/空白字符)的主机名,以展示给终端用户(如xh01@f5)。
    “静态”主机名和“瞬态”主机名都遵从作为互联网域名同样的字符限制规则。

  • 在CentOS 7中,有个叫hostnamectl的命令行工具,它允许你查看或修改与主机名相关的配置。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    //查看一下当前主机名的情况,查看全部三种主机名
    hostnamectl

    //或者,查看全部三种主机名
    hostnamectl status

    //只查看静态、瞬态或灵活主机名,分别使用--static,--transient或--pretty选项
    [root@xh00 ~]# hostnamectl --static

    xh00
    [root@xh00 ~]# hostnamectl --transient

    xh01
    [root@xh00 ~]# hostnamectl --pretty


    //或者,查看到的是瞬态的(Tansient hostname)
    hostname

    //或者查看主机名配置文件,查看到的是静态的(Static hostname)
    cat /etc/hostname

临时有效

  • 只能临时修改的主机名,当重启机器后,主机名称又变回来了。

    1
    hostname 主机名

永久生效:hostnamectl

  • 一旦修改了静态主机名,/etc/hostname 将被自动更新。然而,/etc/hosts 不会更新以保存所做的修改,所以你每次在修改主机名后一定要手动更新/etc/hosts,之后再重启CentOS 7。否则系统再启动时会很慢。

    1
    2
    3
    4
    5
    6
    7
    //永久性的修改主机名称,重启(注销重新登录后可查看)后能保持修改后的。
    hostnamectl set-hostname xxx

    //删除hostname
    hostnamectl set-hostname ""
    hostnamectl set-hostname "" --static
    hostnamectl set-hostname "" --pretty

永久生效:修改配置文件

  • 修改配置文件/etc/hostname来实现主机名的修改。把该文件内容第一行替换成自己想要的主机名重启即可。

    1
    2
    [root@hadoop01 hadoop]# cat /etc/hostname
    hadoop01

永久生效: nmtui

  • 通过nmtui修改,之后重启hostnamed

    1
    2
    nmcli general hostname servername
    systemctl restart systemd-hostnamed
  • 还可以通过nmtui进入图形界面来修改主机名。将光标通过键盘的上下键移动到“设定系统主机名”菜单处,按下回车键。

    此时,屏幕出现“设定主机名”选项卡,输入需要设定的主机名,通过键盘方向键将光标移动到“确定”处,回车键确定即可完成主机名的修改。

网关配置

vmware的配置

  • 打开界面,选择”编辑“-“虚拟网络编辑”
  • 修改NAT模式,修改子网ip的地址段为192.168.61.0,确定。
  • 点击NAT设置,查看网关地址为192.168.61.2

Vmware Fusion 配置

  • 配置自定义网络连接

  • 修改安装虚拟机的网络适配器

  • 注意 :这里的网关地址用子网 IP ,最后一位为 2,bigsur版本为1,具体网关查看方式cat /Library/Preferences/VMware\ Fusion/vmnet2/nat.conf

Hyper-V虚拟网络设置

  • 打开Hyper-V上的虚拟机交换机管理器:

  • 新建虚拟机网络交换机:虚拟机交换机管理-> 新建虚拟机网络交换机, 勾选外部网络,如下

    • 选择外部网络会出现网桥

    • 使用内部网络需要共享网络

  • 配置虚拟机的网络适配器,使用上一步创建的外部网络

  • 配置网络

  • 共享网络

  • 以上设置好后就重启虚拟机,就可以在本地物理机访问虚拟机了

Centos配置静态IP

在rhel8(含centos8)上,在/etc/sysconfig/network-scripts/里也看不到任何脚本文件,没有传统的network.service。因此只能通过其它方法进行网络配置,包括NM命令工具集。换言之,在rhel8上,必须开启NM,否则无法使用网络。

  • 手动配置文件静态IP

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    [root@centos ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
    TYPE="Ethernet"
    PROXY_METHOD="none"
    BROWSER_ONLY="no"
    - BOOTPROTO="dhcp"
    + BOOTPROTO="static"
    DEFROUTE="yes"
    IPV4_FAILURE_FATAL="no"
    IPV6INIT="yes"
    IPV6_AUTOCONF="yes"
    IPV6_DEFROUTE="yes"
    IPV6_FAILURE_FATAL="no"
    IPV6_ADDR_GEN_MODE="stable-privacy"
    NAME="eth0"
    UUID="c3766d2e-1c20-4ff0-a984-c8f2b6ba61fd"
    DEVICE="eth0"
    ONBOOT="yes"
    + IPADDR=192.168.61.45
    + NETMASK=255.255.255.0
    + GATEWAY=192.168.61.2
    + DNS1=192.168.61.2
    + DNS2=8.8.5.5
    + PREFIX=24
  • 重启网卡

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # service 方式重启网络服务
    service network restart

    # Centos8 重新回载网络配置
    [root@centos ~]# nmcli c reload
    [root@centos ~]# nmcli c #查看
    NAME UUID TYPE DEVICE
    docker0 a2b07a6c-142a-4f39-b13e-1b1a2f5cdff0 bridge docker0
    eth0 c3766d2e-1c20-4ff0-a984-c8f2b6ba61fd ethernet eth0

修改主机名与ip映射

  • 域名和ip地址的映射

    • windows C:\Windows\System32\drivers\etc

    • linux:vi /etc/hosts

  • 添加

    1
    2
    3
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
    192.168.61.101 hdp1
  • 测试:ping hdp1

Centos配置yum源

  • 清华大学镜像仓库(推荐)

    地址: https://mirrors.cnnic.cn/

  • 阿里镜像

    1
    2
    3
    4
    5
    # CentOS 6

    wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-6.repo
    或者
    curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-6.repo
    1
    2
    3
    4
    5
    # CentOS 7

    wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
    或者
    curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
    1
    2
    3
    4
    5
    # CentOS 8

    wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo
    或者
    curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo
    1
    2
    3
    4
    非阿里云ECS用户会出现 Couldn't resolve host 'mirrors.cloud.aliyuncs.com' 信息,不影响使用。用户也可自行修改相关配置: eg:

    sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo

    1
    2
    3
    4
    yum clean all     # 清除系统所有的yum缓存
    yum makecache # 生成yum缓存
    yum repolist all # 查看所有的yum源
    yum repolist enabled # 查看可用的yum源
    1
    2
    3
    4
    5
    # yum update不要随便执行,会更新系统内核
    # 升级所有包,改变软件设置和系抄统设置,系统版本内核都升级。
    yum -y update
    # 升级所有包,不改变软件设置和系统设置,系统版本升级,内核不改变。
    yum -y upgrade

Centos8重启网卡

  • 不能使用service和systemctl

  • 方法:nmcli c reload +网卡名 例:nmcli c reload eth0

  • 如果不行,可尝试以下命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 重载所有ifcfg或route到connection(不会立即生效)
    nmcli c reload ifcfg-xxx
    # 重载指定ifcfg或route到connection(不会立即生效)
    nmcli c load /etc/sysconfig/network-scripts/ifcfg-ethX
    nmcli c load /etc/sysconfig/network-scripts/route-ethX
    # 立即生效connection,有3种方法
    nmcli c up ethX
    nmcli d reapply ethX
    nmcli d connect ethX
  • 重启主机后发现网卡不能开机自启,需要手动启动网卡:

    1
    nmcli connection modify ens33 connection.autoconnect yes

防火墙

打开防火墙

1
systemctl start firewalld         # 启动,

关闭防火墙

1
systemctl stop firewalld          # 关闭

重启防火墙

1
service firewalld restart 				#重启

设置开机启动

1
systemctl enable firewalld        # 开机启动

取消开机启动

1
systemctl disable firewalld       # 取消开机启动

查看防火墙状态

1
firewall-cmd --state

查看防火墙规则

1
firewall-cmd --list-all

防火墙中添加应用

1
firewall-cmd --add-service=postgresql --permanent

防火墙添加端口

1
firewall-cmd  --add-port=9527/tcp --permanent

添加参数介绍

1
2
3
4
firewall-cmd:是Linux提供的操作firewall的一个工具;
--permanent:表示设置为持久;
--add-port:标识添加的端口;
--add-service: 标识添加的服务

系统的启动级别

  • 查看当前的系统启动级别(0-6) : runlevel

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    > 0:关机

    > 1:单用户

    > 2:多用户,不能访问网络

    > 3:多用户,能访问网络(全功能,不带图形界面,速度快)

    > 4:未使用

    > 5:带有图形界面系统模式

    > 6.重启
  • 修改启动级别

    1
    2
    3
    4
    # vim /etc/inittab
    id:3:initdefault:
    # 重启
    reboot

selinux

SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。

关闭

1
2
3
4
5
6
7
#查看
cat /etc/selinux/config
#sed -i "s/查找字段/替换字段/g" 文件名
#永久关闭,必须重启
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
#临时关闭
setenforce 0

查看SELinux状态

1
2
3
4
5
# getenforce 用这个命令检查
getenforce

##如果SELinux status参数为enabled即为开启状态
/usr/sbin/sestatus -v
  • Enforcing:强制模式。代表SELinux在运行中,且已经开始限制domain/type之间的验证关系

  • Permissive:宽容模式。代表SELinux在运行中,不过不会限制domain/type之间的验证关系,即使验证不正确,进程仍可以对文件进行操作。不过如果验证不正确会发出警告

  • Disabled:关闭模式。SELinux并没有实际运行

挂载

  • 将一个文件系统的顶层目录挂到另一个文件系统的子目录上,使它们成为一个整体,称为挂载。把该子目录称为挂载点。

    • 挂载源:设备文件
    • 挂载点: 存在的目录
  • 临时挂载:mount -t iso9660 -o ro/loop 挂载源 挂载点

  • 永久挂载:vim /etc/fstab

  • 卸载: umount 挂载点

  • 注意:

    1. 挂载点必须是一个目录。
    2. 一个分区挂载在一个已存在的目录上,这个目录可以不为空,但挂载后这个目录下以前的内容将不可用。
    3. mount命令没有建立挂载点的功能,因此你应该确保执行mount命令时,挂载点已经存在。(不懂?说白了点就是你要把文件系统挂载到哪,首先要先建上个目录。)

挂载命令

  • 格式:mount [-参数][设备名称][挂载点]

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    # -t <文件系统类型> 指定设备的文件系统类型,常见的有:    
    minix linux最早使用的文件系统    
    ext2 linux目前常用的文件系统    
    msdos MS-DOS的fat,就是fat16     
    vfat windows98常用的fat32     
    nfs 网络文件系统    
    iso9660 CD-ROM光盘标准文件系统   -> 挂载镜像文件
    ntfs windows NT 2000的文件系统    
    hpfs OS/2文件系统    
    auto 自动检测文件系统

    # -o<选项> 指定挂载文件系统时的选项。有些也可用在/etc/fstab中。常用的有 
    codepage=XXX 代码页 codepage指定文件系统的代码页,简体中文中文代码是936;
    iocharset=XXX 字符集 iocharset指定字符集,简体中文一般用cp936或gb2312。     
    ro 以只读方式挂载
    rw 以读写方式挂载
    nouser 使一般用户无法挂载
    user 可以让一般用户挂载设备

    # 例子
    mount -t iso9660 /dev/cdrom /mnt/cdrom
    mount -o ro /dev/hda1 /mnt

自动挂载

  • 在/etc目录下有个fstab文件,它里面列出了linux开机时自动挂载的文件系统的列表。
  • 第一列:**/dev/cdrom**:挂载源,要挂在的磁盘分区或者存储设备,或者文件系统
  • 第二列:**/mnt/cdrom**:挂载点,挂载位置
  • 第三列iso9660:文件系统类型,ext4文件系统,swap表示交换分区,……
  • 第四列defaults:挂载参数
  • 第五列0:表示dump选项,dump工具通过这个选项位置上的数字来决定文件系统是否需要备份。如果是0,dump就会被忽略,事实上大多数的dump设置都是0
  • 第六列0:读取文件系统时候的检查顺序,允许的数字是0,1,2,根目录应当获得最高的优先权 1, 其它所有需要被检查的设备设置为2,0表示不检查

apache http

  • apache http服务器

    • 默认端口80
    • 资源文件的根目录 /var/www/html
    • 配置文件/etc/httpd/
  • 下载

    1
    2
    3
    yum install -y httpd
    # 服务的启动与关闭
    service httpd start/stop http
  • 查看httpd服务

    1
    2
    3
    service --status-all | grep httpd

    service httpd status

本地yum 源

  • yum仓库服务器本质上就是一台http服务器,服务器的目录中放置了rpm包,及rpm包的索引信息文件,即可为yum客户端提供rpm文件下载

  • 准备一个apache http服务器, 在httpd服务的web目录中放入rpm库,

    1
    2
    3
    4
    5
    6
    # 将centos安装光盘中的rpm库放入:
    mkdir /var/www/html/centos
    # 拷贝
    cp -r /mnt/cdrom/ /var/www/html/centos/
    # 上面这种方式比较浪费空间,可以不用拷贝,其实只要创建一个软连接即可
    ln -s /mnt/cdrom /var/www/html/centos
  • 用浏览器访问一下httpd服务,看看是不是能看到这些东西
    地址:http://192.168.123.202/centos

  • 配置yum客户端repo地址文件,将本地http服务器加入repo地址

    1
    2
    3
    cd /etc/yum.repos.d/
    # 将内置的源全部disable掉
    rename .repo .repo.bak *
  • 新建一个repo源

    1
    2
    3
    4
    5
    6
    7
    8
    vi  CentOS-Local.repo
    [CentOS-Local]
    name=CentOS-Local
    baseurl=http://192.168.123.202/centos/cdrom0
    http://192.168.123.202/centos/cdrom1
    gpgcheck=0
    enabled=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
  • 检查我们自定义的源是否生效,使用命令:yum repolist

  • 再接下来,就可以使用yum像从公网安装软件一样在内网服务器上下载软件进行安装了

ssh

Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接。虽然任何网络服务都可以通过SSH实现安全传输,SSH最常见的用途是远程登录系统,人们通常利用SSH来传输命令行界面和远程执行命令。telnet使用23号端口,所有的信息,包括用户名和密码都是明文传输;而ssh使用22号端口,所有的信息都会被加密传输,安全性得到了很大的提高。

  • ssh使用十分简单,选择以什么用户连接哪台机器,然后输入密码即可:

    1
    2
    $ssh user@hostname
    user@hostname's password:

加密方式

ssh的主要有点就是安全性,安全性依赖于加密方式,现在主要的加密方式有两种:对称加密和非对称加密。

  • 对称加密使用同一个密钥来进行加密和解密,这样在传输时是安全可靠的,但是如何安全的保存密钥呢,在集群中,客户端的数量巨大,一旦任意一个客户端的密钥被窃取,那么整个系统的安全性也不复存在。
  • 由于对称加密的这个弊端,产生了非对称加密,非对称加密中有两个密钥:公钥和私钥。公钥由私钥产生,但却无法推算出私钥;公钥加密后的密文,只能通过对应的私钥来解密。

非对称加密的登录流程

初始状态:终端要登录Server服务器,发起连接请求ssh work@server.com

  1. 服务端运行有ssh服务,并持续监听22号端口,因此可以生成一对公钥和私钥;此时将公钥返回给客户端
  2. 客户端使用公钥,对登录密码进行加密,(如服务器work用户密码为xxx),生成公钥加密字符串
  3. 客户端将公钥加密字符串发送给服务端
  4. 服务端使用私钥,解密公钥加密字符串,得到原始密码
  5. 校验密码是否合法(此为本机work密码)
  6. 返回登录结果给客户端:成功登录或密码错误

在非对称加密中,由于只有公钥会被传输,而私钥是服务端本地保存,因此即便公钥被监听,也无法拿到原始密码,从而登录服务器。

中间人攻击

在非对称加密中可以有效保护登录密码不被泄漏,但这是在建立连接到真实服务器的情况下。设想一下,如果供给者并不监听密码或公钥,而是直接伪装成服务器呢.

存在Hacker服务器劫持了你的ssh建连请求(如通过DNS劫持等方式),导致你与Hacker机器的连接一切正常,因此它能拿到你的明文密码,并通过明文密码来攻击真实的服务端。

SSH采用了非对称的加密方式,是怎么解决这个问题的呢?

  • 通过让我们肉眼比对来判断目标服务器是否是真实服务器

  • fingerprint(公钥指纹)代替key,主要是key过于长(RSA算法生成的公钥有1024位),很难直接比较。所以,对公钥进行hash生成一个128位的指纹,这样就方便比较了。

1
2
3
4
5
6
7
8
9
10
11
[root@hadoop01 hadoop]# ssh  hadoop@192.168.61.45
# 无法确定主机“server.com(10.10.10.24)”的真实性。
The authenticity of host '192.168.61.45 (192.168.61.45)' can't be established.
ECDSA key fingerprint is SHA256:3Pv+hrn4MBRZu6wy0Wr9Y1PdQDmF+oZmZAwkcbxOwbA.
ECDSA key fingerprint is MD5:32:b1:c0:b0:db:1b:db:34:34:59:69:0b:63:86:d2:0a.
# 知道它的公钥指纹,是否继续连接?
Are you sure you want to continue connecting (yes/no)? yes
# 输入yes继续连接后,就会确认该服务器为可信任服务器,然后添加到known_hosts文件中,下次不用再次确认,然后跳转到输入密码的验证阶段。
Warning: Permanently added '192.168.61.45' (ECDSA) to the list of known hosts.
hadoop@192.168.61.45's password:
Last login: Sat Jul 25 01:45:34 2020 from 192.168.61.1

SSH免密登录

  • 使用ssh登录远程服务器了,但是每次登录都要输入密码,比较麻烦。ssh提供一种免密登录的方式:公钥登录。

  • 登录流程

    1. 在客户端使用ssh-keygen生成一对密钥:公钥+私钥
    2. 将客户端公钥追加到服务端的authorized_key文件中,完成公钥认证操作
    3. 认证完成后,客户端向服务端发起登录请求,并传递公钥到服务端
    4. 服务端检索authorized_key文件,确认该公钥是否存在
    5. 如果存在该公钥,则生成随机数R,并用公钥来进行加密,生成公钥加密字符串pubKey(R)
    6. 将公钥加密字符串传递给客户端
    7. 客户端使用私钥解密公钥加密字符串,得到R
    8. 服务端和客户端通信时会产生一个会话ID(sessionKey),用MD5R和SessionKey进行加密,生成摘要(即MD5加密字符串)
    9. 客户端将生成的MD5加密字符串传给服务端
    10. 服务端同样生成MD5(R,SessionKey)加密字符串
    11. 如果客户端传来的加密字符串等于服务端自身生成的加密字符串,则认证成功此时不用输入密码,即完成建连,可以开始远程执行shell命令了
  • ssh-genkey

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    ssh-genkey是生成密钥的工具,执行完成后生成公钥和密钥,这两个文件会默认保存在~/.ssh/路径下。常用的参数为:
    -t: 指定生成密钥类型(rsa、dsa)。默认为rsa
    -f: 指定存放私钥的文件,公钥文件名为私钥文件名加.pub后缀。默认为id_rsa
    -P: 指定passphrase(私钥的密码),用于确保私钥的安全。默认为空
    -C: 备注。默认为user@hostname

    我们直接执行来生成密钥,所有的参数都可以为空,也就是一直回车确认:
    $ ssh-keygen
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/hadoop/.ssh/id_rsa):
    Created directory '/home/hadoop/.ssh'.
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in /home/hadoop/.ssh/id_rsa.
    Your public key has been saved in /home/hadoop/.ssh/id_rsa.pub.
    The key fingerprint is:
    SHA256:DFFUH19Nv9PkOpZ3HpvttCawBXJrKFttIWHYQLeBjTg hadoop@hadoop01

    ## 此时,生成的文件在~/.ssh/目录下,我们会看到这些文件:
    id_rsa // 私钥文件
    id_rsa.pub // 公钥文件
    authorized_keys // 存放客户端公钥的文件
    known_hosts // 确认过公钥指纹的可信服务器列表的文件
    config // 指定不同域名使用哪个密钥的配置文件

    ## 因为一台机器即能是客户端,又能是服务端,因此同时存在authorized_keys(在该机器为服务端时使用)和Known_hosts(在该机器为客户端时使用)。
  • 例子

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    # 第一步:在本地机器上使用ssh-keygen产生公钥私钥对
    [hadoop@hadoop01 ~]$ ssh-keygen -t rsa -P password
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/hadoop/.ssh/id_rsa):
    /home/hadoop/.ssh/id_rsa already exists.
    Overwrite (y/n)? y
    Your identification has been saved in /home/hadoop/.ssh/id_rsa.
    Your public key has been saved in /home/hadoop/.ssh/id_rsa.pub.
    The key fingerprint is:
    SHA256:ld27QVjFQSpPw5YeQFArbZoQrXzWxRDMGaRbJuUozCk hadoop@hadoop01
    The key's randomart image is:

    # 第二步:用ssh-copy-id将公钥复制到远程机器中,第一次需要密码登录
    [hadoop@hadoop01 ~]$ ssh-copy-id username@hostname

    # ERROR: No identities found
    # 当没有值传递的时候或者 如果 ~/.ssh/identity.pub 文件不可访问(不存在), ssh-copy-id 将显示上述的错误信息
    # ssh-copy-id -i ~/.ssh/id_rsa.pub -p 23 username@hostname
    # -p 制定端口
    # -i 指定公钥文件

对不同服务器的配置

我们的服务器会有很多的用户,如果所有的用户都用同一份密钥,可能就没办法划分权限或者区分用户,如多个用户提交git就需要按照用户名来生成密钥,用于区分用户。同时你可能也希望针对不同的服务器使用不同的密钥对,因此需要config配置文件来配置针对不同服务器的配置:

1
2
3
4
5
6
7
8
$vim ~/.ssh/config
Host a.baidu.com
User work
IdentityFile ~/.ssh/id_rsa

Host b.baidu.com
User zhaoshuaiqiang
IdentityFile ~/.ssh/zhaoshuaiqiang

这样在连接不同的服务器时,就会使用不同的密钥文件来登录。在客户端生成密钥对之后,将公钥追加到服务器的authorized_keys文件中即可。此时,即可免密登录服务器。

1
2
3
4
5
6
7
8
...
15 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAn30bjwtkLW82vTlLMQnI/a42J2g7o+HBCpSzBgNG+xfZuSNQOAU8+FNKQvriT4AL7ToiTtrZDLOEGqyQzaxQejuNnWG6aQ9ETh96qXhVLecWidaBieFGuv+F
uXz6x551xtFXx64AzG+706dhnv1nOACYlrnfvXhi5kZzWzprET+CxMIeYhJQwwc19pF5zCWeU9QUvd1mOu0n8JVycevmuXRdVx9WpXq2+aaaaaaaa3uYGMBxvSLtT40O1AiEZ+k9EeYCnTEV
tnGoVWCyxpwv6rR/GDOtJL/d+/Wb6I0HEKxxe087yZz8GWpQN5TEIAjq3oEjI/aiGw== work@a.baidu.com
16 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAzRmK+CAVLnryXqQwweu8Yji8bGAvqzf8PSDzYn1nmE6ZeDkBbrWvFlVZ2yOip3IX8RjvuPc28mTCr0LsIOOmpvET0SzOkt0hzLBPiyCN/QvbKU/RbUv8v5y2
hEAlbUkMEzv7qOHQEruGEvA5y99gf/nYjK5OFKVpmg838OScUV3i88Xbqk8rtcuRZHWuZLnuB5spBsEE5r1UrnH/Ik7frZr8Vb4X6aZWbAp1yc0SqZ8JXVbmOiakqq0WqkLm+zqhEwr+Ooh2guH23x9zjMqY
Uy+aaaaaBEBC+LepCvskArBt/SRwJDJkcItz8T7kBC3CP0Y0X4hB+6k6/yM/pup5w== work@b.baidu.com

私钥的安全性

假设你已经实现了服务器集群的免密登录,那么如果你的一台客户端被攻击成功了,那么整个集群的安全性便荡然无存了。因此,我们有时还需要对密钥做安全性保障,即设置私钥密码:

1
2
// 使用rsa方法加密,生成test密钥对,私钥密码为123456
ssh-keygen -t rsa -f test -P 123456

此时,各机器仍然是免密登录,但是需要你输入私钥密码:

1
2
$ssh work@a.baidu.com
Enter passphrase for key '/home/work/.ssh/test':

scp传输文件

scp(secure copy)linux系统下基于ssh登录进行安全的远程文件拷贝的命令。与scp相似的命令是cp,但是cp只能本机拷贝而不能跨服务器,因此需要与ssh合作构成scp命令。远程拷贝的命令还有rsyncscp消耗资源少,不会提高多少系统负荷,在这一点上,rsync就远远不及它了。rsyncscp会快一点,但当小文件多的情况下,rsync会导致硬盘I/O非常高,而scp基本不影响系统正常使用。

  • 传递文件到远程

    1
    scp local_file remote_username@remote_ip:remote_file
  • 传递文件夹到远程

    1
    scp -r local_folder remote_username@remote_ip:remote_folder
  • 复制远程文件到本地(只是调换下文件参数位置即可)

    1
    scp remote_username@remote_ip:remote_file local_file
  • 我们直接使用scp来跨机器拷贝文件,会提示输入密码:

    1
    2
    3
    # 提示输入server端服务器的work用户密码
    [work@client.com ~]$ scp test.php work@server.com:/home/work
    work@server.com's password:

    scp是先使用ssh连接服务端机器后,再使用网络来执行远程拷贝(cp)

  • 参考ssh的过程:

    1
    2
    3
    # 同样的提示输入server端服务器的work用户密码
    [work@client.com ~]$ ssh work@server.com
    work@server.com's password:

加入sudo权限

  • CentOS7给普通用户配置sudo权限,即把普通用户加入wheel用户组

    • 在CentOS系统中,默认情况下,wheel用户组成员被授予sudo权限。

      1
      2
      3
      [root@localhost ~]# cat /etc/sudoers
      ## Allows people in group wheel to run all commands
      %wheel ALL=(ALL) ALL
    • 授予 sudo 权限

      1
      2
      3
      4
      5
      6
      usermod -aG wheel user
      # -g<群组>  修改用户所属的群组。
      # -G<群组>  修改用户所属的附加群组。
      # -a 表示在原来所属组的基础上追加
      -G 修改当前次要组
      -G -a是增加新的次要组
    • 检查用户是否添加进 wheel 组

      1
      2
      3
      4
      5
      $ lid -g wheel
      # 显示用户id和组id信息
      # id 命令可以显示真实有效的用户 ID(UID) 和组 ID(GID)。
      # UID 是对一个用户的单一身份标识。组 ID(GID)则对应多个UID。
      $ id username
  • 修改sudo配置文件,在root下执行,否则请加sudo

    1
    2
    3
    4
    5
    # 打开sudo配置文件
    visudo
    # 找到下面这两行,并在下面新增红色部分
    root ALL=(ALL) ALL
    username ALL=(ALL) ALL

JDK安装

  • 查询自带的jdk

    1
    2
    rpm -qa | grep java
    rpm -e java-1.6.0-openjdk-1.6.0.35-1.13.7.1.el6_6.x86_64 --nodeps
  • 下载JDK文件,解压:/usr/loc   | /opt

  • 配置环境变量:

    1
    2
    3
    vim /etc/profile
    export JAVA_HOME=/usr/local/jdk1.8.0_73
    export PATH=$JAVA_HOME/bin
  • 执行配置文件source /etc/profile

安装Mysql

  • 查询卸载已安装

    1
    2
    rpm -qa | grep -i mysql
    rpm -e 程序名
  • 安装服务器端

    1
    rpm -ivh MySQL-server-5.6.26-1.linux_glibc2.5.x86_64.rpm
  • 安装客户端

    1
    rpm -ivh MySQL-client-5.6.26-1.linux_glibc2.5.x86_64.rpm
  • 启动服务

    1
    2
    3
    service mysql start
    # 查看网络接口
    netstat -nltp
  • 配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 获取初始密码
    cat  /root/.mysql_secret
    # mysql配置文件
    cp /use/my.cnf /etc/my.cnf
    # 启动mysql, 设置密码
    set PASSWORD=PASSWORD('root');
    # 增加远程登录权限
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
    # 刷新权限
    FLUSH PRIVILEGES;

YUM镜像站

Centos7

  • 在安装完CentOS后一般需要修改yum源,才能够在安装更新rpm包时获得比较理想的速度。
  1. 备份,将 CentOS-Base.repo 为CentOS-Base.repo.backup

    1
    cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
  2. 下载新的 http://mirrors.aliyun.com/repo/Centos-7.repo

    1
    2
    3
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    # 或者
    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
  3. 清除缓存

    1
    2
    yum clean all     # 清除系统所有的yum缓存
    yum makecache # 生成yum缓存