Linux-SSH免密登陆与NFS网络共享硬盘
1. SSH
SSH是一种以安全方式提供远程登录的协议,由于其采用加密的方式传输账户密码和数据信息,所以替代了之前采用明文传输的FTP与Telnet。sshd是基于SSH协议开发的一款远程管理服务程序,提供了两种安全验证方式。
- 基于口令的验证—用账户和密码来验证登录;
- 基于密钥的验证—需要在本地生成密钥对,然后把密钥对中的公钥上传至服务器, 并与服务器中的公钥进行比较;该方式相较来说更安全;
虽然基于密钥验证的方式较为安全,但是通过其他服务传输密钥以此免密登录服务器也是常用攻击方式。
现在的Linux系统基本都集成了sshd软件,在保证网络畅通的情况下,通过ssh 用户@目标ip
即可通过SSH登录目标主机。
1.1 SSH的主配置文件
sshd的配置信息保存在/etc/ssh/sshd_config中,通过去除配置参数前的井号注释键。即可让对应的配置参数生效。配置文件中包含的重要参数如下表所示。
参数 | 作用 |
---|---|
Port 22 | 默认的 sshd 服务端口 |
ListenAddress 0.0.0.0 | 设定 sshd 服务器监听的 IP 地址 |
Protocol 2 | SSH 协议的版本号 |
HostKey /etc/ssh/ssh_host_key | SSH 协议版本为 1 时,DES 私钥存放的位置 |
HostKey /etc/ssh/ssh_host_rsa_key | SSH 协议版本为 2 时,RSA 私钥存放的位置 |
HostKey /etc/ssh/ssh_host_dsa_key | SSH 协议版本为 2 时,DSA 私钥存放的位置 |
PermitRootLogin yes | 设定是否允许 root 管理员直接登录 |
StrictModes yes | 当远程用户的私钥改变时直接拒绝连接 |
MaxAuthTries 6 | 最大密码尝试次数 |
MaxSessions 10 | 最大终端数 |
PasswordAuthentication yes | 是否允许密码验证 |
PermitEmptyPasswords no | 是否允许空密码登录(很不安全) 在 RHEL 7 系统中,已经默认安装并启用了 sshd 服务程序。接下来使用 ssh 命令进行 |
退出ssh登录使用exit命令即可。
如果禁止以 root 管理员的身份远程登录到服务器,则可以大大降低被黑客暴力破解密码 的几率。下面进行相应配置。首先使用 Vim 文本编辑器打开 sshd 服务的主配置文件,然后把 第 48 行#PermitRootLogin yes 参数前的井号(#)去掉,并把参数值 yes 改成 no,这样就不再 允许 root 管理员远程登录了。记得最后保存文件并退出。
Linux就该这么学 --刘瑞
1.2 SSH免密登录主机(密钥验证登录)
密钥传输数据简而言之,就是通过公钥传输数据,通过私钥解密数据。数据要传给谁,就用谁的公钥加密。所以要通过密钥验证登录,就需要生成一对公私钥,并将公钥传给对方,用来传输数据。
1.2.1 第一步:客户端生成“密钥对”
[root@localhost ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): #按回车键或设置密钥的存储路径
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again: #直接按回车键或设置密钥的密码
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:#再次按回车键或设置密钥的密码
SHA256:jW2NLeQxN1zUcJ1+HvbQv+J80kvxiIwplrB51OhEMsk root@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
| .+o+|
| . . . . oo|
| E . + + .. |
| + O B ..+o|
| . S O o .+=|
| B o = . .*|
| o * o o o.o|
| o . .o.+ |
| .o+..|
+----[SHA256]-----+
1.2.2 第二步:把客户端主机中生成的公钥文件传送至远程主机
[root@localhost ~]# ssh-copy-id 192.168.186.4
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.186.4 (192.168.186.4)' can't be established.
ECDSA key fingerprint is SHA256:zdM8UzlfNE5Y+CU7Smizsp+gcfd2L6Q8P0FpuXPzDIw.
ECDSA key fingerprint is MD5:20:33:3c:eb:ea:1e:47:92:af:ed:c8:55:b6:b9:c3:d2.
Are you sure you want to continue connecting (yes/no)? yes #输入yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.186.4's password: #输入目标主机root密码
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '192.168.186.4'"
and check to make sure that only the key(s) you wanted were added.
1.2.3(可选) 第三步:在目标主机进行设置,仅允许密钥验证登录
[root@localhost ~]# vim /etc/ssh/sshd_config
62 # To disable tunneled clear text passwords, change to no here!
63 #PasswordAuthentication yes
64 #PermitEmptyPasswords no
65 PasswordAuthentication no
[root@localhost ~]# systemctl restart sshd
1.2.4 第四步:此时尝试登录到目标主机,无需密码即可登录
[root@localhost ~]# ssh 192.168.186.4
Last login: Sun Mar 27 04:23:18 2022 from gateway
2. NFS共享网络硬盘
NFS:Network File System,是通过网络,让不同的机器、不同操作系统可以共享彼此的文件。
NFS服务器可以让其他计算机将NFS服务器共享的目录挂载在本地端的文件系统中。对于本地端来看,NFS共享的目录就像本地磁盘一样可以访问。NFS也是家用NAS使用的技术。NFS一般用于储存共享视频和图片等静态数据。
NFS服务本身没有固定的端口号,所以NFS需要一个服务软件交换端口信息,这个服务就是rpc,没有固定端口号的程序首先将自己的端口信息交与rpc服务,在通过rpc服务给将服务端的NFS端口交给客户端,从而让客户端获取的NFS端口建立和服务端的NFS端口连接。
2.1 NFS挂载操作步骤
首先作为服务端的主机需要安装rpc主程序:rpcbind和NFS主程序:nfs-utils。yum install nfs-utils rpcbind -y
为确保可以成功连接服务端,防止默认服务端防火墙、selinux阻止正常的NFS共享服务。
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
2.1.1 NFS服务器上建立NFS文件共享目录,并设置权限
[root@localhost ~]# mkdir /data
[root@localhost ~]# chmod -Rf 777 /data
可以在data下创建文件,测试共享效果。
2.2.2 配置权限
通过配置NFS服务程序的配置文件/etc/exports,可以控制访问共享文件的权限,保证数据的安全性。
参数 | 作用 |
---|---|
ro | 只读 |
rw | 读写 |
root_squash | 当 NFS 客户端以 root 管理员访问时,映射为 NFS 服务器的匿名用户 |
no_root_squash | 当 NFS 客户端以 root 管理员访问时,映射为 NFS 服务器的 root 管理员 |
all_squash | 无论 NFS 客户端使用什么账户访问,均映射为 NFS 服务器的匿名用户 |
sysnc | 同时将数据写入到内存与硬盘中,保证不丢失数据 |
async | 优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢 失数 |
NFS客户端地址与权限间没有空格。(当该目录下有使用的共享磁盘,可以通过exportfs刷新配置文件)
[root@localhost data]# vim /etc/exports
/data 192.168.186.* (ro,sync,root_squash)
2.2.3 启动NFS与rpc服务.并加入开机启动项
[root@localhost data]# systemctl restart rpcbind nfs-server
[root@localhost data]# systemctl enable rpcbind nfs-server
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
2.2.4 客户机设置
使用showmount
命令可查看对应机器的远程共享信息。
参数 | 作用 |
---|---|
-e | 显示NFS服务器的共享列表 |
-a | 显示本机挂载文件资源的情况 |
-v | 显示版本号 |
[root@localhost ~]# showmount -e 192.168.186.5
Export list for 192.168.186.5:
/data (everyone)
创建本地挂载目录,挂载服务器的共享目录。
[root@localhost ~]# mkdir /localdata
[root@localhost ~]# mount -t nfs 192.168.186.5:/data /localdata
[root@localhost ~]# ls /localdata
readme
[root@localhost ~]# cat /localdata/readme
This NFS 磁盘
```
[root@localhost ~]# ls /localdata
readme
[root@localhost ~]# cat /localdata/readme
This NFS 磁盘
使用df -Th
可以查看磁盘挂载情况
[root@localhost ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
……省略信息……
192.168.186.5:/data nfs4 42G 3.7G 39G 9% /localdata
与挂载本地磁盘一样,如果需要永久挂载则,需要修改 /etc/fstab 文件。
[root@localhost ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sat Feb 26 16:37:30 2022
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=aa1e9d68-cfb1-4746-8d7f-8830d585af39 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 /192
192.168.186.5:/data /localdata nfs defaults 0 0