我有一个文本文件,其中包含未使用的PC网络上的所有主机名。我正在创建一个维护脚本,该脚本将在早上运行以重新启动计算机。
我尝试了一些将SSH SSH到计算机并重新启动它的代码,但是我只能手动执行此操作。
重新启动计算机的代码为ssh hostname echo "password" | sudo -S reboot
我已经创建了一个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命令中错过了一个'“ 。
答案 0 :(得分:0)
错误似乎出在您正在执行的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"