gpt4 book ai didi

bash - 在本地和远程机器上运行的 Shell 脚本

转载 作者:行者123 更新时间:2023-12-04 19:15:08 25 4
gpt4 key购买 nike

我是 shell 脚本的新手,
我正在尝试编写一个可以在我的本地机器上运行的脚本。

它的命令很少在我的本地运行,然后在远程服务器上运行一些。

下面是一个示例脚本 -
第一个两个将在我的本地系统上运行,
其余的将在远程服务器上运行。

例如 -

scp -i permissions.pem someJar.jar ubuntu@ip:/var/tmp
ssh -i permissions.pem ubuntu@ip
sudo su
service someService stop
rm -rf /home/ubuntu/someJar.jar
rm -rf /home/ubuntu/loggingFile.log
mv /var/tmp/someJar.jar .
service someService start

由于脚本将在我的本地机器上运行,
如何确保第三个和更多命令在远程服务器而不是我的机器上生效?

这是我的 sample.sh 文件 -
scp -i permissions.pem someJar.jar ubuntu@ip:/var/tmp
SCRIPT="sudo su; ps aux | grep java; service someService stop; ps aux | grep java; service someService start; ps aux | grep java;"
ssh -i permissions.pem ubuntu@ip $SCRIPT

scp 正在工作,之后没有显示任何内容。

最佳答案

您需要将脚本的重置作为参数传递给 SSH。试试这种格式:

SCRIPT="sudo su; command1; command2; command3;"
ssh -i permissions.pem ubuntu@ip $SCRIPT

见: http://linuxcommand.org/man_pages/ssh1.html

希望这可以帮助。

更新:
运行命令后看不到任何内容的原因是 sudo 需要密码。为了避免这种情况,有三种解决方案:
  • ubuntu用户需要权限才能执行脚本中的所有任务。
  • 将密码传递给 SCRIPT 下的 sudo:echo 'password' | sudo su; ...
  • 修改 sudo-er 文件并允许 ubuntu用户到 sudo不提示输入密码。运行sudo visudo并添加以下行:ubuntu ALL = NOPASSWD : ALL

  • 每个系统管理员都会有不同的方法来解决这个问题。我想每个人都会同意 option 2是最不安全的。重置是有争议的。在我看来 option 3稍微安全一些。然而,如果您的 key 被泄露,则整个服务器都会被泄露。最安全的是 option 1 .虽然分配个人权限很痛苦,但这样做会限制您对分配的权限的暴露,以防万一您的 key 被泄露。

    另注:替换 ; 可能会有所帮助与 &&SCRIPT .通过这样做,您将确保第二个命令仅在第一个命令成功完成时运行,第三个命令仅在第二个成功完成时运行,依此类推。

    关于bash - 在本地和远程机器上运行的 Shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41114473/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com