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

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

时间:2024-03-12 11:33:57浏览次数:37  
标签:脚本 10 Shell 文件 主机 times ssh Linux

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

标签:脚本,10,Shell,文件,主机,times,ssh,Linux
From: https://www.cnblogs.com/huangjiabobk/p/18067925

相关文章

  • 在Linux中,linux内核参数如何修改?
    在Linux中,内核参数的修改可以通过多种方式实现,以满足不同的系统需求和性能优化。以下是一些详细的方法:直接修改/proc/sys/目录中的文件:/proc/sys/目录是Linux内核参数的虚拟文件系统表示,可以直接编辑此目录下的文件来修改内核参数。例如,要修改TCP内存参数,可以使用如下命......
  • 银河麒麟(Kylin Linux Advanced Server V10)配置centos8的yum源
    1、虚拟机安装麒麟操作系统(此步骤忽略)。2、将麒麟的yum源备份。mvkylin_x86_64.repo/tmp/3、将阿里云开源镜像站的centos8的yum源,下载到麒麟的服务器下并重新加载。wget-O/etc/yum.repos.d/CentOS-Base.repohttps://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.re......
  • Linux之ps -ef进程命令及netstat网络状态命令简记
    ps-ef释义:ps-ef表示查看全格式的全部进程。ps是linux下最常用的也是非常强大的进程查看命令,常配合管道命令|和查找命令grep同时执行来查看特定进程。参数含义:-e显示所有进程。-f全格式。-h不显示标题。-l长格式。-w宽输出。a显示终端上的所有进程,包括其他用户的......
  • KBL610-ASEMI开关电源专用KBL610
    编辑:llKBL610-ASEMI开关电源专用KBL610型号:KBL610品牌:ASEMI封装:KBL-4最大重复峰值反向电压:1000V最大正向平均整流电流(Vdss):6A功率(Pd):中小功率芯片个数:4引脚数量:4类型:插件整流桥、整流桥正向浪涌电流:200A正向电压:1.10V最大输出电压(RMS):封装尺寸:如图工作温度:-55°C~......
  • Linux:mount挂载
    学习自:Linux下的mount命令详解_mount-o-CSDN博客Linux系统之mount命令-腾讯云开发者社区-腾讯云1、功能mount可以将特定文件系统挂载到某个Linux目录下。相当于为该文件系统开辟了一个独占的存储空间,这个文件系统可以自由地访问它的挂载目录,就如同这个挂载目录是它原本就......
  • 洛谷题单指南-线性表-P1540 [NOIP2010 提高组] 机器翻译
    原题链接:https://www.luogu.com.cn/problem/P1540题意解读:本题模拟内存的调入调出,内存先入先出的特性就是队列。解题思路:本题需要两种数据结构:队列、数组队列用来模拟内存的操作,数组充当hash表用于判断单词在内存是否存在核心逻辑:对于每一个单词,如果内存不存在,查一次词典,再将......
  • PowerShell 使用指南
    PowerShell使用指南Started:2024.03.1209:00:00Update:2024-03-1209:36:270.Purpose在Win11中,默认的终端已经是PowerShell,包括VSCode里的默认终端,这一方面改进了cmd.exe表达力不足的问题,另一方面要求程序员们要学习一点PowerShell语法,之前的bat语法虽......
  • EOL 总结:CMakeLists 与 shell
    一、CMakeLists1、AUX_SOURCE_DIRECTORY定义:aux_source_directory查找在某个路径下的所有源文件###Demo1#查找当前目录下的所有源文件#并将名称保存到SRC_LIST变量aux_source_directory(.SRC_LIST)add_executable(main${SRC_LIST})###Demo2AUX_SOURCE_DIRECT......
  • 浮木云学习日志(10)---页面框架布局
    随着对浮木云软件设计开发平台的深入了解,发现浮木云真的是一个很人性化的工具。前两次对浮木云的布局容器、弹性容器和栅格容器进行了简单的了解,同时也知道这些容器是页面是设计框架的基础,本次我会根据自己对容器的了解进行的一个简单的页面框架构建。感兴趣的小伙伴可以直接去他......
  • Linux nohup命令详解
    Linuxnohup命令详解我们自己笔记本或台式机的显卡往往不能支持我们进行深度学习实验或大模型训练,因此我们往往使用SSH连接服务器然后去运行代码。有的时候我们跑的程序需要跑几个小时甚至几天,这样我们就需要一直开着电脑挂着SSH;偶尔也会遇上网络断开,程序半途中止的情况。所以,......