在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连接失败,脚本可能会显示错误信息。你可以根据需要添加额外的错误处理逻辑来增强脚本的健壮性。

相关文章
|
11天前
|
Linux 数据安全/隐私保护 Windows
命令方式:window向linux传文件
【10月更文挑战第6天】本文介绍了如何在Linux系统中通过命令`ip a`获取IP地址,并在Windows系统下使用CMD命令行工具和SCP命令实现文件传输。示例展示了如何将D盘中的`mm.jar`文件上传至IP地址为192.168.163.122的Linux系统的/up/目录下,最后在Linux系统中确认文件传输结果。
167 65
|
12天前
|
Shell
Shell 文件包含
10月更文挑战第5天
27 4
|
18天前
|
Linux Shell
Linux系统文件默认权限
Linux系统文件默认权限
34 2
|
10天前
|
Linux 开发工具 数据安全/隐私保护
linux异常一:feng 不在 sudoers 文件中,此事将被报告。yum提示Another app is currently holding the yum lock; waiting for
这篇文章介绍了在CentOS 7系统中安装Docker时遇到的两个常见问题及其解决方法:用户不在sudoers文件中导致权限不足,以及yum被锁定的问题。
23 2
linux异常一:feng 不在 sudoers 文件中,此事将被报告。yum提示Another app is currently holding the yum lock; waiting for
|
11天前
|
Web App开发 网络协议 Linux
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
这篇文章是关于Linux命令的总结,涵盖了从基础操作到网络配置等多个方面的命令及其使用方法。
36 1
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
|
6天前
|
Linux Shell 数据库
Linux文件查找新姿势:总有一种你没见过
文件查找是Linux用户提升工作效率的关键技能。本文介绍了几种不常见的文件查找方法,包括使用`find`结合`column`美化输出、利用`locate`和`mlocate`快速查找、编写Shell脚本自动化任务、使用现代工具`fd`以及结合`grep`和`rg`进行内容搜索。此外,还推荐了几款图形界面搜索工具。掌握这些技巧,让你的文件查找更加高效便捷。
28 2
|
12天前
|
Linux 网络安全
Linux虚拟机与主机和Xshell的连接问题解决
Linux虚拟机与主机和Xshell的连接问题解决
31 1
|
13天前
|
Linux C++
Linux c/c++文件的基本操作
在Linux环境下使用C/C++进行文件的基本操作,包括文件的创建、写入、读取、关闭以及文件描述符的定位。
13 0
Linux c/c++文件的基本操作
|
13天前
|
Linux C++
Linux c/c++文件虚拟内存映射
这篇文章介绍了在Linux环境下,如何使用虚拟内存映射技术来提高文件读写的速度,并通过C/C++代码示例展示了文件映射的整个流程。
30 0
|
13天前
|
Linux C++
Linux c/c++文件移动
这篇文章介绍了在Linux环境下,使用C/C++语言通过命令方式和文件操作方式实现文件移动的方法。
43 0