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

时间:2016-12-30 10:16:45

标签: shell unix ssh sudo su

我已经查看了以下链接,但没有设法使其正常工作:

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(我不是root,也不能改变它),命令需要是& #34; sudo su - oracle&#34;准确。

由于

1 个答案:

答案 0 :(得分:1)

你不能在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"

你可以将它作为expect / path /运行到/ your / expectfile。

这将登录,用密码“foobar”做sudo,执行id并退出。这会有任何帮助吗?

哈努哈利