我对如何使用 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:~#
这很奇怪,因为脚本在仅执行第一个命令之前显示了四个命令。
此外,如果我尝试从 root 提示符下手动执行另一个命令,则没有任何反应,直到我按 ^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:您知道在哪里可以找到我可以适应我们需要的这种脚本吗?我一直在寻找,但没有找到任何东西......
好的,我发现了我的错误:脚本文件是在 Windows 下创建的,所以没有正确解释行尾!Bash 脚本文件应始终在 Linux 系统上创建...