如何 ssh/sudo su - oracle/run 一些命令

How to ssh/sudo su - oracle/run some commands

我已经查看了以下链接,但未能成功:

SSH to server, Sudo su - then run commands in bash

Can I ssh somewhere, run some commands, and then leave myself a prompt?

Run ssh and immediately execute command

我正在尝试自动执行以下序列来登录数据库

$ ssh <myserver>
me@myserver$ sudo su - oracle
<enter password>
oracle@myserver$ bash
oracle@myserver$ export ORAENV_ASK=NO
oracle@myserver$ export ORACLE_SID=ORACLEDB
oracle@myserver$ . oraenv
oracle@myserver$ echo $ORACLE_HOME

我尝试了命令(基于上面的链接)但它不起作用:

ssh -t myserver "echo password | sudo -S su - oracle ; bash ; export ORAENV_ASK=NO"

如何将这些命令组合到 shell 脚本(甚至是 perl 脚本)中,执行它,然后让自己留在提示符下,以便我可以 运行 sqlplus?这可能吗?

注: ssh 不需要密码,因为我们使用 authorized_keys、,但是 命令必须完全 "sudo su - oracle"。

谢谢

您不能在 shell 中执行此操作,但您可以使用 expect 执行此操作(如果在 Debian 变体上,则 apt-get install expect)。

这是一个非常简单的期望文件。您需要做一些研究才能使其在您的环境中工作,但这给出了总体思路。

spawn ssh foo@x.x.x.x
expect "~$"
send "sudo bash\r"
expect {
       password {send "foobar\r";exp_continue}
       "#"
}

send "id\r"
expect "root"

你会 运行 这正如预期的那样 /path/to/your/expectfile。

这将登录,使用密码 "foobar" 执行 sudo,执行 id 并退出。这会有什么帮助吗?

汉奴