通常情况下,su 命令会将您切换到一个子 Shell 中,您可以通过打印当前进程 ID(PID)来查看。
$ echo $$
94260
$ sudo echo $$
94260
$ sudo su
$ echo $$
94271
不过,要绕过这个问题,您可以像这样将要运行的命令管道传递给su
$ echo "whoami" | sudo su
root
而且我们运行多个命令
$ echo "uptime;whoami" | sudo su
11:29 up 8 days, 19:20, 4 users, load averages: 4.55 2.96 2.65
root
现在要使它与ssh一起工作
$ ssh wderezin@localhost 'echo "uptime;whoami" | sudo su'
sudo: no tty present and no askpass program specified
该命令需要为 su 命令分配一个 tty。在远程执行期间添加 -t 选项以分配一个 tty。
$ ssh -t wderezin@localhost 'echo "uptime;whoami" | sudo su'
11:36 up 8 days, 19:26, 5 users, load averages: 2.97 2.97 2.76
root
你的命令应该长成这样
ssh -i somepemfile.pem ubuntu@1.1.1.1 'echo "pm2 restart 0; pm2 restart1" | sudo su'