bash脚本在ssh之后执行命令

bash script execute commands after ssh

我试图通过我的第一个脚本执行一些命令,但它不起作用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/bash

#connect to server
echo"Connecting to the server..."

ssh -t root@IP '

    #switch user to deploy
    su - deploy

    #switch path
    echo"Switching the path"
    cd /var/www/deploys/bin/app/config

    #run deploy script
    echo"Running deploy script"

    /usr/local/bin/cap -S env=prod deploy

    #restart apache
    sudo /bin/systemctl restart  httpd.service

    bash -l
'

发生什么事了?我已成功连接到服务器,用户已更改,然后我看不到任何事情发生。当我像在终端中那样按ctrl+c时,应该执行的命令会出现一些输出,但也会出现一些错误。

为什么我在启动脚本后看不到终端中发生的一切?我做错事了吗?

顺便说一句:当我尝试手动连接并自己运行命令时,一切都运行良好。

使用CENTOS 7。


通过ssh登录并执行一组命令的简单方法是

1
2
3
ssh user@ip << EOF
   #some commands
EOF

这里,EOF用作命令列表的分隔符。

脚本可以修改为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
ssh -t root@IP << EOF

    #switch user to deploy
    su - deploy

    #switch path
    echo"Switching the path"
    cd /var/www/deploys/bin/app/config

    #run deploy script
    echo"Running deploy script"

    /usr/local/bin/cap -S env=prod deploy

    #restart apache
    sudo /bin/systemctl restart  httpd.service

    bash -l
EOF

将执行该命令并在之后关闭那里的连接