<分区>
我有一个文本文件,其中包含我的 PC 网络上所有未使用的主机名。我正在创建一个将在早上运行以重新启动机器的维护脚本。
我已经尝试了一些可以通过 SSH 连接到机器并重新启动它的代码,但是我只能手动执行此操作。
重启机器的代码是ssh hostname echo "password"| sudo -S 重启
我创建了一个 bash 脚本并测试了变量以确保它按行输出主机名。但是当我把那行代码放在下面时它不起作用
#!/bin/bash
file="/home/ubuntu/Desktop/hostnames.txt"
while IFS= read -r ipaddress
do
ssh "$ipaddress" echo "password | sudo -S reboot"
done <"$file"
我希望代码一个接一个地执行并应用该命令来重新启动机器,因为如果我手动执行该命令,它就可以做到这一点。但是我收到一个错误
Line 7 Unexpected EOF while looking for matching '"'
Line 8 Syntax Error: Unexpected End of File.
感谢任何指导。
编辑 - 意识到我在 ssh 命令中遗漏了一个“”。
错误似乎出在您正在执行的 ssh
命令中。
执行远程命令的方式是:
ssh [user]@$ipaddress "echo $password | sudo -S reboot"
当您使用本地使用的同一用户名登录时,您可以省略 [user]
。还要确保在脚本中的某处设置了 $password
变量:
#!/bin/bash
file="/home/ubuntu/Desktop/hostnames.txt"
user="my-server"
password="my-secret"
while IFS= read -r ipaddress
do
ssh "$user@$ipaddress" "echo $password | sudo -S reboot"
done <"$file"
事实上,您可能不应该将密码存储在脚本中,因此您可能需要像这样添加密码提示:
echo -n Password:
read -s password
echo
# Run Command
# ...
把这些放在一起会让你:
#!/bin/bash
file="/home/ubuntu/Desktop/hostnames.txt"
user="my-server"
echo -n Password:
read -s password
echo
# Run Command
while IFS= read -r ipaddress
do
ssh "$user@$ipaddress" "echo $password | sudo -S reboot"
done <"$file"