在该篇文章中,我们将介绍用于快速分析存储于文本文件(日志、报文等等)中的数据的便利工具。
通常我们所需要的数据并不储存在电脑本地中。所以首先,我们将探讨如何访问及使用远程服务器。因此,我们需要使用最适配的 SSH(安全外壳协议/Secure Shell:即一种加密网络协议,该协议专为远程登录会话和其他网络服务提供安全性的协议,可以有效防止远程管理过程中的信息泄露问题。)
在 Ubuntu 终端中,你可以使用以下命令行在 SSH 协议下访问远程服务器:
$ ssh user@host
$ ssh -p port host
采用 key 连接:
$ ssh -i key.pem user@host
远程主机执行的命令行:
$ ssh -i key.pem user@host 'command'
SSH Client 已经默认安装在 Ubuntu 中;如果没有的话,可以在终端使用以下命令行安装:
command sudo apt-get install ssh
在 Windows 中
如果你使用的是微软的 Windows 系统,那么你需要安装一个免费的 PuTTY 程序(地址:http://www.putty.org/)以保证 SSH 协议正常运行。为了使用 PuTTY 连接,我们需要经过以下几个步骤:
1. 运行 PuTTY 并键入我们的连接设置:
-
主机名:example.com
-
端口:22 (保留默认设定)
-
连接类型:SSH(保留默认设定)
2. 点击 Open 开始 SSH 会话框。
3. 一旦 SSH 连接已经打开,我们就会看到终端提示符会请求输入用户名。
4. 下一步,输入我们的密码。注意,当我们输入密码时,我们并不会看到任何光标移动或任何输入符号(如:*******)。这是 PuTTY 标准安全的特性,请放心继续输入。
5. 现在我们可以开始输入命令提示符了。
SSH 的重要特征就是能创建安全通道。
在 Ubuntu 中
1. 网络到世界的通道:
ssh -f -N -R 22:192.168.0.1:22 [email protected]
在主机 1.1.1.1 上输入:访问主机 192.168.0.1
$ ssh localhost
设置:
使用 SSH 通道非常有效的方式是使用通信加密(traffic encryption)。例如,如果我们使用的是开放网络,但并不希望其他人拦截我们的数据就可使用 SSH 通道。
2. 世界到网络的通道:
ssh -f -N -L 80:192.168.0.1:80 [email protected]
在你的主机输入命令行:http://localhost:80
访问网络主机 192.168.0.1,其位于主机 1.1.1.1 的后面。
设置:
从世界到网络的通道(反向通道)在我们需要访问机器,但机器又被防火墙保护时需要。操作的原则即连接最开始是由远程机器发起。在这样的通道中,我们可以发送任何通信(traffic),而并不仅仅只是 SSH。
在 PuTTY 中使用 SSH 通道
源端口:22
目标端口:22
-
检查 box 处于「Dynamic」状态,并单击「Add」按钮。
-
在会话框中输入要求的「Host Name」并选择 SSH 协议。然后键入「Saved Sessions」名保存设置。例如,键入「HostName with ssh tunnel on 22」并点击「Save」。双击主机名将创建连接。
-
一旦 SSH 连接已经创建了,我们就可以使用浏览器了。打开一个页面,其中 IP 地址是已经确定的,现在我们就能看到地址定义为了远程机器的 IP 地址。
现在已经连接了主机,我们也就可以操作它了。但还是有一些操作需要 root 权限。为了接收到远程主机的信息(如果主机的 root 权限已经设置为允许),我们需要在终端中执行:
$ sudo -s
在输入 root-user 密码后,远程主机的连接也就通过终端确定了。你将会得到 root 权限:
我们现在已经了解了连接到一台主机所需要的一切,但这对于在主机上分析数据还是远远不够的。因此,下面我们需要了解在远程主机上获取和处理数据的基本控制命令行。
在文件系统上工作
现在让我们学一学如何在文件系统上处理数据。下面是所需要了解的命令行列表。
1. 在文件和文件夹系统工作
创建一个文件夹 dir_name:
mkdir dir_name
重命名文件夹 dir_name 为 dir_name2:
mv dir_name dir_name2
删除文件夹/文件:
rm -rf dir_name
设置:
移除所有以 file2017 为开头的文件;符号*指代任意字符,我们可以将该符号用在任何地方指代任何缺失的字符:
rm -rf file2017*
创建文件 file_name.txt:
touch file_name.txt
重命名文件:
mv file_name.txt file_name2.txt
2. 权限
执行文件 file 的权限:
chmod 777 file.sh
在文件夹 dir_name 中设定所有文件为 R:
chmod -R 777 dir_name - set access 777 recursively
查看更多请点击: https://ru.wikipedia.org/wiki/Chmod。
3. 所有者/群组
设置文件 file.txt 的所有者和群组:
chown ubuntu:ubuntu file.txt
递归地设置文件夹的所有者和群组:
chown -R ubuntu:ubuntu dir_name
4. 查看磁盘空间
查看所有磁盘分区:
df -h
获取文件夹大小:
du -sh dir_name/
获取文件夹大小和子目录大小:
du -h dir_name/*
获得文件大小:
du -h filename
下面的命令行能获取主机系统的信息:
free
top/htop
现在我们已经在文件系统上运行并获取了我们需要的信息。不过在大多数情况下,这些并不是人类可读的信息。因此我们需要一些工具帮助分析数据。
当我们需要分析信息,首先就需要找到它,通常使用命令行:
find / var -name search _name
如果名字太长或未知,同样可以使用符号*。在该案例中,使用命令行:
find / var -name search_name*
我们可以在主机中查找认证日志:
一旦我们搜到了所需的文件,通常打开查看是有必要的。我们可以使用以下命令行实现:
cat file_name
cat file_name1 file_name2 > file_name3
cat file_name* > file_name_end
我们不仅同样可以为文件重定向(redirect)输出流,同时还能采用命令行用脚本完成:
./some_script.sh > /path/to/file.txt
./some_script.sh >> /path/to/file.txt
在 /dev/null 中输出标准输出(STDOUT)和误差流(STDERR)
some command > /dev/null 2>&1
下一步是保存文件目录
/var/log/auth.log
和
/var/log/auth.log.1
在
/home/auth.log
文件中进行更多的分析。
我们可以从输出看到,有太多的信息我们并不需要。现在我们需要过滤获得正好需要的信息,而该任务有一个很有用的 grep,句法展示为如下:
cat file_name | grep some_line
Grep 同样能应用于命令行和脚本:
python run_sum_script.py | grep error
通过 sshd 滤波器,我们可以打印仅仅和 ssh 相关的授权记录:
我们同样能追踪文件的修订。当我们测试一个网页时,该方法是十分有效的。所以当查询日志或查看新的授权记录时,我们能「抓取」它。
该命令行将打印第三方应用的新纪录到文件中。
tail -f some_web_server_log
该命令同样能连同 grep 一起使用。
打印包含误差的新纪录
tail -f some_web_server_log | grep error
让我们在操作中查看一下 tail。首先,设置追踪文件
/var/log/auth.log
并使用命令行 tail
-f /var/log/auth.log | grep sshd