【问题标题】:How to ssh/sudo su - oracle/run some commands如何 ssh/sudo su - oracle/运行一些命令
【发布时间】:2017-05-14 15:35:39
【问题描述】:

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

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,BUT 无密码sudo 不是一个选项,也不是直接使用su(我不是root,无法更改),命令需要是“sudo su - 甲骨文”正是如此。

谢谢

【问题讨论】:

    标签: shell unix ssh sudo su


    【解决方案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"
    

    你会按照期望 /path/to/your/expectfile 运行它。

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

    汉努

    【讨论】:

      最近更新 更多