如何自动 ssh 到集群服务器并在那里运行命令来获取一些信息?

如何自动 ssh 到集群服务器并在那里运行命令来获取一些信息?

一个简单的问题,假设我想通过 ssh 连接到集群机器并监控每台机器的一些信息。具体来说,我想nvidia-smi在每台机器上运行以了解它们的 GPU 使用情况。我尝试过:

for host in machine1 machine2 machine3
 do 
    ssh "$host" 
    nvidia-smi 
 done

但它只登录到machine1,然后就停在那里。只有在我退出 之后machine1才会nvidia-smi执行,但在本地终端上,而不是machine1。然后它登录到machine2并停在那里......

答案1

将要执行的命令放在这一ssh行:

for host in machine1 machine2 machine3
 do 
        ssh "$host" nvidia-smi 
 done

您可能需要指定的完整路径nvidia-smi

此外,不要将服务器列表硬编码到此脚本(和其他类似的脚本)中,而是将列表保存在文件中:

cat >Servers.txt <<EOF
machine1
machine2
machine3
EOF

并将该for行改为:

for host in $(cat Servers.txt) 

然后,当“服务器列表”发生变化时,您只需更改一个地方,而不是每个脚本。

相关内容