在Linux中,如何利用Shell把10台主机的当前时间写到一个文件里边?

简介: 在Linux中,如何利用Shell把10台主机的当前时间写到一个文件里边?

在Linux中,使用Shell脚本收集多台主机的当前时间并将其写入一个文件是一个常见的任务。下面是一个详细的步骤说明,包括如何设置SSH密钥认证(以避免手动输入密码)以及编写和执行Shell脚本。

1. 设置SSH密钥认证

为了避免在脚本执行过程中需要手动输入密码,你可以使用SSH密钥认证。这意味着你需要在本地机器上生成一个SSH密钥对,并将公钥分发到每台远程主机上。

  1. 生成SSH密钥对

在本地机器上执行以下命令生成SSH密钥对:

ssh-keygen -t rsa

按照提示操作,通常你可以选择不设置密码短语(passphrase)以简化自动化过程。

  1. 分发公钥到远程主机

对于每台远程主机,你需要将公钥(通常位于~/.ssh/id_rsa.pub)添加到其~/.ssh/authorized_keys文件中。你可以使用ssh-copy-id命令来自动完成这个过程:

ssh-copy-id user@remote_host

user替换为远程主机的用户名,remote_host替换为远程主机的IP地址或主机名。对每台主机重复此操作。

2. 编写Shell脚本

接下来,你需要编写一个Shell脚本来收集时间并写入文件。

  1. 创建脚本文件

使用文本编辑器创建一个新的Shell脚本文件,例如collect_times.sh

nano collect_times.sh
  1. 编写脚本内容

在脚本文件中,输入以下内容:

#!/bin/bash  
# 定义主机列表  
HOSTS=("host1" "host2" "host3" "host4" "host5" "host6" "host7" "host8" "host9" "host10")  
# 定义输出文件路径  
OUTPUT_FILE="times.txt"
# 清空或创建输出文件  
> "$OUTPUT_FILE"
# 遍历主机列表并收集时间  
for HOST in "${HOSTS[@]}"; do
# 使用ssh获取主机的当前时间,并追加到输出文件  
echo "Time from $HOST: $(ssh $HOST date)" >> "$OUTPUT_FILE"
done
echo "Times collected and saved to $OUTPUT_FILE"

在这个脚本中,HOSTS数组包含了你要收集时间的主机列表。OUTPUT_FILE变量指定了输出文件的路径。脚本会遍历每台主机,使用ssh命令获取当前时间,并将结果追加到输出文件中。

  1. 保存并退出编辑器

nano中,按Ctrl + O保存文件,然后按Ctrl + X退出。

  1. 给脚本执行权限

在终端中,为脚本文件添加执行权限:

chmod +x collect_times.sh
3. 执行Shell脚本

现在你可以执行脚本以收集时间并将其写入文件。

./collect_times.sh

脚本会依次连接到每台主机,获取当前时间,并将结果追加到times.txt文件中。每个主机的时间前面都会加上对应的主机名。

4. 查看结果

执行完脚本后,你可以使用cat命令查看times.txt文件的内容,以验证时间是否已成功收集并写入文件。

cat times.txt

这个文件现在应该包含了从每台主机收集的当前时间信息。

综上所述,这个脚本假设你已经正确设置了SSH密钥认证,并且每台主机都允许你从执行脚本的机器进行无密码登录。如果某些主机不可用或SSH连接失败,脚本可能会显示错误信息。你可以根据需要添加额外的错误处理逻辑来增强脚本的健壮性。

相关文章
|
14天前
|
Linux
Linux下使用ls查看文件颜色全部为白色的解决方法,以及Linux中文件颜色介绍
Linux下使用ls查看文件颜色全部为白色的解决方法,以及Linux中文件颜色介绍
60 2
|
15天前
|
Linux
Linux 服务器下载百度网盘文件
本教程指导如何使用 `bypy` 库从百度网盘下载文件。首先通过 `pip install bypy` 安装库,接着运行 `bypy info` 获取登录链接并完成授权,最后将文件置于指定目录并通过 `bypy downdir /Ziya-13b-v1` 命令下载至本地。
20 1
Linux 服务器下载百度网盘文件
|
7天前
|
Shell Linux 开发工具
linux shell 脚本调试技巧
【9月更文挑战第3天】在Linux中调试shell脚本可采用多种技巧:使用`-x`选项显示每行命令及变量扩展情况;通过`read`或`trap`设置断点;利用`echo`检查变量值,`set`显示所有变量;检查退出状态码 `$?` 进行错误处理;使用`bashdb`等调试工具实现更复杂调试功能。
|
8天前
|
Ubuntu Linux Shell
Linux系统命令 安装和文件相关命令
本文档详细介绍了Linux系统中的常用命令,包括软件安装卸载命令如`dpkg`和`apt-get`,压缩与解压命令如`gzip`、`bzip2`和`xz`,以及`tar`命令用于打包和解包。此外还介绍了文件分割命令`split`,文件操作命令如`cat`、`head`、`tail`、`more`、`less`等,管道命令和`wc`、`grep`、`find`、`cut`、`sort`、`uniq`、`diff`等实用工具。最后,文档还讲解了文件属性相关的命令如`chmod`、`chown`、`chgrp`以及创建硬链接和软链接的`ln`命令。
|
17天前
|
Linux
linux 删除乱码文件名的文件
【8月更文挑战第26天】当遇到文件名显示为乱码,导致无法正常通过键盘输入文件名进行删除操作时,可以利用鼠标的复制功能配合`rm`命令实现删除。对于文件夹的删除,可使用`rm -rf 目录名`。然而,有时这种方式仍无法删除某些特殊乱码文件,这时可以通过获取文件的i节点号(使用`ls -i`或`ll -i`命令查看)并执行`find -inum [节点号] -delete`来进行删除。这种方法特别适用于处理那些因文件名问题而难以删除的情况。
64 2
|
18天前
|
JSON Linux 网络安全
【Azure 应用服务】如何从App Service for Linux 的环境中下载Container中非Home目录下的文件呢?
【Azure 应用服务】如何从App Service for Linux 的环境中下载Container中非Home目录下的文件呢?
|
14天前
|
JavaScript Linux
Linux中和文件相关的操作
Linux中和文件相关的操作
23 0
|
14天前
|
Linux 开发工具 文件存储
Linux修改主机名的两种方法
Linux修改主机名的两种方法
15 0
|
16天前
|
Linux
Linux0.11 文件打开open函数(五)
Linux0.11 文件打开open函数(五)
26 0
|
18天前
|
前端开发 JavaScript Linux
【Azure 应用服务】在Azure App Service for Linux环境中,部署的Django应用,出现加载css、js等静态资源文件失败
【Azure 应用服务】在Azure App Service for Linux环境中,部署的Django应用,出现加载css、js等静态资源文件失败