我已经对如何使用 Ubuntu 22.04 操作系统正确设置和保护我们的新 VPS 进行了为期三周的广泛研究,目前我已经对需要做什么有了很好的想法。
但是,我想构建一个 bash 脚本,使用全局脚本和按主题划分的子脚本自动完成所有这些众多而复杂的任务。
例如,全局脚本VPS_Setup.sh
将依次启动下面的子脚本:
- VPS_Setup_01_Update_OS.sh
- VPS_Setup_02_Create_New_Sudo_Group.sh
- VPS_Setup_03_Create_New_Sudo_User.sh
- VPS_Setup_04_Adjust_Timezone.sh
- VPS_Setup_05_Adjust_Swapfile.sh
...
在里面VPS_Setup_01_Update_OS.sh
,我简单地写了以下命令:
apt update -y
apt upgrade -y
apt autoremove -y
apt autoclean -y
经过多次尝试,主要基于以下来源:
- https://stackoverflow.com/questions/305035/how-to-use-ssh-to-run-a-local-shell-script-on-a-remote-machine
- https://unix.stackexchange.com/questions/87405/how-can-i-execute-local-script-on-remote-machine-and-include-arguments
- 如何通过 ssh 在远程机器上运行本地 bash 脚本?
我通过这种方式从全局脚本启动子脚本:
SSHPASS='mypassword' sshpass -e ssh -tt -o StrictHostKeyChecking=no [email protected] 'bash -s' < ./VPS_Setup_01_Update_OS.sh
子脚本启动后,我没有收到任何错误消息。
但是,只执行了第一个命令。
然后,它停止并显示命令提示符。
显示内容如下:
Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.2.0 x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
Last login: Thu Feb 9 19:54:37 2023 from XX.XX.XX.XX
root@XXXXXX:~# apt update -y
apt upgrade -y
apt autoremove -y
apt autoclean -y
Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Hit:2 http://security.ubuntu.com/ubuntu jammy-security InRelease
Hit:3 http://archive.canonical.com/ubuntu jammy InRelease
Hit:4 http://archive.ubuntu.com/ubuntu jammy-updates InRelease
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
All packages are up to date.
root@XXXXXX:~#
这很奇怪,因为脚本在执行第一个命令之前会显示四个命令。
此外,如果我尝试从根提示符手动执行另一个命令,则什么也不会发生,直到我按 ^C。
然后,它返回到我的本地提示符。
我也尝试了第二种方法:直接从全局脚本执行命令,通过这种方式:
SSHPASS='mypassword' sshpass -e ssh -tt -o StrictHostKeyChecking=no [email protected] <<ENDSSH1
apt update -y
apt upgrade -y
apt autoremove -y
apt autoclean -y
ENDSSH1
完全相同的结果!
问题 1:我做错了什么,我该如何处理?
问题 2:您知道哪里可以找到这种脚本,我可以调整它来满足我们的需求吗?我搜索过了,但什么也没找到……
答案1
好的,我发现了我的错误:脚本文件是在 Windows 下创建的,因此行尾解释不正确!Bash 脚本文件应始终在 Linux 系统上创建...