关于shell:如何ssh / sudo su – oracle /运行一些命令

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

我已经查看了以下链接,但没有成功使其工作:

ssh到server,sudo su-然后在bash中运行命令

我可以在某个地方ssh,运行一些命令,然后给自己留下一个提示吗?

运行ssh并立即执行命令

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

1
2
3
4
5
6
7
8
$ 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

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

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

如何在shell脚本(甚至Perl脚本)中组合这些命令,执行它,然后将自己留在一个提示下,以便在之后运行sqlplus?这是可能的吗?

注:ssh不需要密码,因为我们使用的是授权的密钥,但是无密码sudo不是一个选项,也不是直接使用su(我不是根用户,不能更改),命令必须是"sudo su-oracle"。

谢谢


在shell中不能这样做,但可以使用expect(apt-get-install-expect-if-on-debian变体)。

这是一个非常简单的expect文件。你需要做一些研究,让它在你的环境中工作,但这给出了一个总体的想法。

1
2
3
4
5
6
7
8
9
10
11
12
13
spawn ssh [email protected]
expect"~$"
send"sudo bash
"
expect {
       password {send"foobar
";exp_continue}
      "#"
}

send"id
"
expect"root"

您可以将其作为expect/path/to/your/expectfile运行。

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

汉努