我写了一个问题关于 Server Fault,但我猜它更适用于这个社区。
我正在编写一个脚本,用于初始设置我的 Droplet。在脚本中,我将打开与我的 Ubuntu 14.04 服务器的 SSH 连接,如下所示(使用先前定义的USER
变量REMOTE
):
ssh -t -t $USER@$REMOTE <<'ENDSSH'
ENDSSH
在该 SSH 连接中,我有多个想要执行的命令 - 安装 Node.js、更新 npm、安装 MongoDB 等等。
但是,一旦我执行一个apt-get install
命令,其他命令就不会执行。
所以,如果我有这个:
ssh -t -t $USER@$REMOTE <<'ENDSSH'
sudo apt-get update
sudo apt-get install -y nodejs
sudo apt-get install -y npm
ENDSSH
命令sudo apt-get install -y npm
不会被执行。现在,我知道我可以在同一apt-get install
命令中安装多个软件包,但这不是我要问的,因为之后的其他命令将不会被执行。我只是为了简单起见写了这个例子,这样我就可以解释我的问题。具体来说,我有以下命令:
ssh -tt $USER@$REMOTE <<'ENDSSH'
curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo npm install -g npm
ENDSSH
命令sudo npm install -g npm
和其后的所有内容都不会被执行。
我遇到了类似的问题这个他们说我在打开连接时应该放置多个-t
标志(或) ,我正在这样做,但这没有帮助。-tt
ssh
我究竟做错了什么?
答案1
您可能希望以 结尾,&&
以便脚本仅在命令完成时继续执行。例如:
ssh -t -t $USER@$REMOTE <<'ENDSSH'
sudo apt-get update &&
sudo apt-get install -y nodejs &&
sudo apt-get install -y npm
ENDSSH