我是 Linux 新手,正在寻找一种简单的方法来在设定的时间更新 wlan0 接口上的 SSID 和相关密码。我需要将文件从网络“A”上的设备复制到网络“B”上的设备,并且只有一个无线接口。
我已经能够手动跟踪该过程;
更新 -
/etc/netplan/50-cloud-init.yaml
申请 -
sudo netplan apply
重新开始 -
sudo systemctl restart systemd-networkd
地位 -
sudo systemctl status systemd-networkd
但现在,我想通过 Bash 或其他方法实现自动化。我在 RasperryPi Zero 2W 上运行 Ubuntu,因此只有一个 WiFi 接口。我也尝试过连接 Netgear A6150,但尚未实现。
答案1
在您选择的任何位置复制一份/etc/netplan/50-cloud-init.yaml
- 此处称为/path/to/50-cloud-init.yaml
(同时此文件作为备份)。
该文件的内容应如下:
version: 2
wifis:
renderer: networkd
wlan0:
dhcp4: true
optional: true
access-points:
SSID:
password: PASS
这里最重要的是SSID
和PASS
按此处所述给出。调整内容以匹配您的特定网络配置。
然后为您的 bash 脚本创建一个文本文件,也可以将其放在任何您喜欢的位置并使其可执行 - 这里引用为/path/to/bash-script
。
此文件的内容应为:
#!/bin/bash
# check if script is run as root
if [[ "$EUID" -ne 0 ]]; then
echo "Please run this script as root / with sudo."
exit 1
fi
# assign values to $SSID and $PASS variables - you can add additional SSID and password pairs if you like.
case "$1" in
<SSID1>)
SSID=<SSID1>
PASS=<PASS1>
;;
<SSID2>)
SSID=<SSID2>
PASS=<PASS2>
;;
esac
# only do something if $SSID variable has been set
if [[ -n "$SSID" ]]; then
# copy your template file into the netplan folder
cp -f /path/to/50-cloud-init.yaml /etc/netplan/50-cloud-init.yaml
# replace the "variables" in the netplan config file with the actual values
sed -i "s/SSID/$SSID/;s/PASS/$PASS/" /etc/netplan/50-cloud-init.yaml
# apply netplan config
netplan apply
# restart networkd
systemctl restart systemd-networkd
else
echo "Invalid SSID given".
exit 1
fi
将所有的<SSIDx>
和替换<PASSx>
为您的实际的 SSID 和密码。
现在运行你的脚本,/path/to/bash-script
并将你选择的内容SSID
作为第一个参数,例如:
/path/to/bash-script <SSIDx>
这将实现您所追求的目标。