Shell脚本在连接到外部服务器后停止

问题描述 投票:0回答:1

我正在尝试自动部署到AWS服务器,作为我的编码课程的一个很酷的项目。我正在使用ShellScript自动化不同的进程,但是在连接到AWS E2 Ubuntu服务器时。连接到服务器时,在关闭连接之前,它不会执行任何其他shell命令。有没有办法让它在连接时继续发送命令?

read -p "Enter Key Name: " KEYNAME

read -p "Enter Server IP With Dashes: " IPWITHD

chmod 400 $KEYNAME.pem

ssh -i "$KEYNAME.pem" ubuntu@ec2-$IPWITHD.us-east-2.compute.amazonaws.com

此处及以下任何内容都不会运行,直到服务器断开连接

amazon-web-services sh
1个回答
2
投票

几个基本要点:

shell脚本是shell执行的一系列顺序命令。它运行一个程序,等待它退出,然后运行下一个程序。

ssh程序连接到服务器并告诉它该做什么。退出后,您将不再连接到服务器。

您在ssh之后输入的指令只会在ssh退出时运行。然后,这些命令将在您的本地计算机上运行,​​而不是在您进行sshed的服务器上运行。

所以你要做的是运行ssh并告诉它在服务器上运行一组步骤,然后退出。

看看man ssh。它说:

ssh目的地[命令]

如果指定了命令,则在远程主机而不是登录shell上执行该命令

所以,要运行像echo hi这样的命令,你可以像这样使用ssh:

ssh -i "$KEYNAME.pem" ubuntu@ec2-$IPWITHD.us-east-2.compute.amazonaws.com "echo hi"

或者,对于更长的命令,请使用bash heredoc:

ssh -i "$KEYNAME.pem" ubuntu@ec2-$IPWITHD.us-east-2.compute.amazonaws.com <<EOF
  echo "this will execute on the server"
  echo "so will this"
  cat /etc/os-release
EOF

或者,将所有这些命令放在一个单独的脚本中并将其传递给ssh:

cat commands-to-execute-remotely.sh | ssh -i "$KEYNAME.pem" ubuntu@ec2-$IPWITHD.us-east-2.compute.amazonaws.com

绝对阅读What is the cleanest way to ssh and run multiple commands in Bash?及其答案。

© www.soinside.com 2019 - 2024. All rights reserved.