通过shell脚本依次执行Sudo、ssh

通过shell脚本依次执行Sudo、ssh

我尝试通过交互模式依次执行以下三个命令,一切正常。但是当我通过 shell 脚本使用同一个命令时,sudo 之后控制权被剥夺,第二个命令 ssh 不会在没有用户干预的情况下执行。

sudo su -s /bin/bash webuser
ssh -i /home/webuser/gcp/gcpusercer.pem [email protected]
telnet 1 3300

if [[ $1 == *"gcp"* ]]

then
    sudo su -s /bin/bash webuser

    ssh -i /home/webuser/gcp/gcpusercer.pem [email protected]

    telnet 1 3300

fi

答案1

你的脚本有两个问题。

  1. sudossh除了通过 ssh 运行单个命令时)都是需要用户交互的命令。因此它们不能“仅仅”在脚本中运行。

  2. 执行脚本中的命令依次。这意味着即使命令不需要用户交互,ssh命令也会被执行由启动的 shell 完成sudotelnet命令将被执行ssh 会话结束。这可能不是您想要的。当您手动运行这三个命令时,您正在运行telnet 里面正在运行的 ssh 会话里面由 启动的 shell sudo。要以编程方式执行相同的操作,您需要比 shell 脚本更高级的工具。您可以尝试使用预计例如。

一个可以完成您想要的操作的期望脚本的非常简单的“骨架”可能看起来像这样(当然,这没有经过任何方式的测试):

#!/usr/bin/expect
spawn sudo su -s /bin/bash webuser
expect "ssword:"
send "insert_sudo_password_here\r"
expect "$ "
send "ssh -i /home/webuser/gcp/gcpusercer.pem [email protected]\r"
expect "ssword:"
send "insert_ssh_password_here\r"
expect "$ "
send "telnet 1 3300\r"
interact

sudo如果和/或命令中不需要密码ssh,请删除查找密码提示的适当expect/send命令对并发送实际密码。

相关内容