0%

使用ssh服务管理远程主机-2

使用ssh服务管理远程主机-2

配置网卡连接网络

查看网卡的配置信息:

1
2
3
4
5
nmcli connection show

[root@localhost ~]# nmcli connection show
NAME UUID TYPE DEVICE
ens33 5c179781-eb87-4317-b9cb-615dbbd50812 ethernet ens33

查看网卡的连接状态:

1
2
3
4
5
6
nmcli device status

[root@localhost ~]# nmcli device status
DEVICE TYPE STATE CONNECTION
ens33 ethernet connected ens33
lo loopback unmanaged --

查看端口状态

在RHEL7系统中 netstat命令已经被 ss 命令替代了

ss命令用于查看本机的端口连接状态

参数 作用
-a 显示所有的套接字
-l 显示所有连接状态的套接字
-e 显示详细的套接字信息
-m 显示套接字的内存使用情况
-p 显示套接字的进程信息
-4 显示ipv4的套接字信息
-6 显示ipv6的套接字信息
-t 仅显示tcp的套接字信息
-u 仅显示udp的套接字信息
-n 不解析主机名(提升速度)
-s 查看概述

所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议栈进行交互的接口 。

Socket(套接字)可以看成是两个网络应用程序进行通信时,各自通信连接中的端点,这是一个逻辑上的概念。它是网络环境中进程间通信的API(应用程序编程接口),也是可以被命名和寻址的通信端点,使用中的每一个套接字都有其类型和一个与之相连进程。通信时其中一个网络应用程序将要传输的一段信息写入它所在主机的 Socket中,该 Socket通过与网络接口卡(NIC)相连的传输介质将这段信息送到另外一台主机的 Socket中,使对方能够接收到这段信息。 Socket是由IP地址和端口结合的,提供向应用层进程传送数据包的机制 [2]。

Socket是面向客户/服务器模型而设计的。通信的一方扮演客户机的角色,另一方扮演服务器的角色。服务器在运行中一直监听套接字指定的传输层端口,并等待着客户机的连接请求。当服务器端收到客户机发来的连接请求以后,服务器会接受客户机的连接请求,双方建立连接后,就可进行数据的传递。 

套接字包括 IP 地址和端口号两个部分。通过网络通信的每对进程需要使用一对套接字。不同的进程之间的通信所使用的套接字是不一样的,套接字可以用来区分不同的进程之间的数据传输。套接字主要有目标IP、传输层使用的传输协议、传输层使用的端口号这3个重要参数。 

套接字Socket=(IP地址:端口号),套接字的表示方法是点分十进制的lP地址后面写上端口号,中间用冒号或逗号隔开。每一个传输层连接唯一地被通信两端的两个端点(即两个套接字)所确定。例如:如果IP地址是210.37.145.1,而端口号是23,那么得到套接字就是(210.37.145.1:23) 。

查看监听状态中的套接字:

1
2
3
4
5
6
7
8
9
10
ss -ntl

[root@localhost ~]# ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 ssh *:22 *:*
LISTEN 0 100 smtp 127.0.0.1:25 *:*
LISTEN 0 128 sunrpc *:111 *:*
LISTEN 0 128 ssh [::]:22 [::]:*
LISTEN 0 100 smtp [::1]:25 [::]:*
LISTEN 0 128 sunrpc [::]:111 [::]:*

查看进程名和PID号码:

1
2
3
4
5
6
7
8
9
10
11
12
13
ss -s

[root@localhost ~]# ss -s
Total: 578 (kernel 1020)
TCP: 7 (estab 1, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0

Transport Total IP IPv6
* 1020 - -
RAW 0 0 0
UDP 6 3 3
TCP 7 4 3
INET 13 7 6
FRAG 0 0 0

路由追踪命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@localhost ~]# tracepath www.linuxprobe.com
1?: [LOCALHOST] pmtu 1500
1: no reply
2: 122.224.74.193 6.194ms
3: 61.164.17.237 5.079ms
4: no reply
5: 202.97.98.37 35.364ms
6: 106.63.120.10 29.248ms
7: 106.63.121.10 32.233ms asymm 8
8: 106.63.0.82 38.140ms
9: 117.72.16.7 33.069ms
10: no reply
11: no reply
12: no reply
13: 117.72.45.242 29.742ms reached
Resume: pmtu 1500 hops 13 back 12

远程控制服务

sshd服务:

SSH(Secure Shell)是一种能够提供安全远程登陆会话的协议

比起ftp,telnet等服务在网络上不会对口令或数据进行加密来说,SSH协议是安全的

sshd服务提供两种安全验证的方法:

1、基于口令的安全验证:经过验证账号与密码即可登陆到远程主机

2、基于密钥的安全验证:需要在本地生成“密钥对”后将公钥传送至服务端,进行公共密钥的比较

sshd服务的配置文件解析:

1
[root@localhost ~]# cat /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时,私钥存放的位置
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 是否允许空密码登录(很不安全)

使用ssh命令

ssh命令用于远程管理linux主机

格式:ssh [参数] 主机

参数 作用
-p 指定连接端口(默认为22)
-v 显示连接过程的详细信息

ssh x.x.x.x

安全密钥验证

使用密码存在着被暴力破解或嗅探监听的危险

可以让ssh服务基于密钥进行安全验证(无需密码验证)

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
step1
在本地主机中生成"密钥对"

[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:MDPrmbAX3U6aofL1myzMiabEECz4amtnkogTKclsdlo root@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
| |
|.. |
|o o = |
| o . B . |
|ooo . o S o |
|=* E + = * |
|Bo= = *++.. |
|==.+ +o.=o . |
|.o+ .o. .=. |
+----[SHA256]-----+


将生成好的公钥传送至远程主机:
ssh-copy-id x.x.x.x


step2
首先要在远程主机中修改sshd服务的配置文件(修改后重启服务):
编译ssh服务程序主配置文件
vim /etc/ssh/sshd_config

将允许密码验证的参数设置为no
PasswordAuthentication no

将允许密钥验证的参数设置为yes
PubkeyAuthentication yes

远程传输命令

要想将一些文件通过网络传送给其他主机,又恰好两台主机都是linux系统,我们便可以直接用scp命令传输文件到另外一台主机

scp命令用于在网络中安全的传输文件

格式:scp [参数] 本地文件 远程账户@远程IP地址:远程目录“

参数 作用
-v 显示详细的连接进度
-p 指定远程主机的sshd端口号
-r 传送文件夹时请加此参数
-6 使用ipv6协议

例:将文件/root/out.txt传送到远程主机的/home目录

scp /root/test.txt x.x.x.x:/home

传送下文件夹并指定远程用户:

scp -r roots/ user@x.x.x.x:/home

scp命令还可以将远程主机的文件传输到本地

格式:scp [参数] 远程用户@远程IP远程:远程文件 本地目录

将远程主机/etc/issue.net文件下载到本地的/root目录:

scp user@x.x.x.x:/etc/issue.net /root

不间断会话服务

了解Screen服务

ssh服务后有一个情况——当连接的终端关闭时,运行在服务器上的命令也会终端,如果有长时间文件备份或FTP传输等任务时,通常我们都会新开一个连接窗口再继续工作,并且中途不能关闭窗口或断开链接(也包括网络不稳定的情况),否则这个任务就会中断,还要重新开始

Screen便是为了解决上述问题而设计的,用户可以通过Screen命令同事控制多个命令行会话并自由切换,特点:

会话恢复:即便网络中断,也可让会话随时恢复,用户不会失去对命令行的控制

多窗口:每个会话都是独立运行的,拥有独立的编号、输入输出和窗口缓存

会话共享:可以使多个用户从不同的终端使用同一个会话,也可以让他们看到完全相同的输出

掌握命令参数

使用yum命令安装screen程序包:

yum install screen

参数 作用
-A 让所有视窗自动调整适应当前终端机的大小
-d <会话名称> 将指定的screen会话离线
-r <会话名称> 将指定的screen会话恢复
-h <行数> 指定视窗的缓冲区行数
-S <会话名称> 指定screen会话的名称
-x 恢复所有离线的会话
-ls 或 -list 显示当前的screen会话
-wipe 自动将无法使用的screen会话删除

创建与使用会话功能

1
2
3
4
5
6
7
[root@localhost ~]# screen -S backup
[root@localhost ~]# screen -ls
There is a screen on:
4796.backup (Attached)
1 Socket in /var/run/screen/S-root.

[root@localhost ~]#

当执行screen命令后会调用系统默认的shell(通常即bash),所以敲完screen命令后会立即返回一个命令提示符,虽然看起来与刚刚没有变化,但此时你已经进入screen会话了