从root运行脚本,它调用sudo oracle中的另一个脚本。如何在不询问oracle密码的情况下做到这一点

时间:2015-07-08 07:30:05

标签: linux database oracle shell unix

我使用root登录到linux机器,登录后我使用su - oracle连接我的数据库。现在我有2个shell脚本,一个在home home,一个在home / oracle。在home / oracle中,我编写了一个用于备份数据库的脚本。 root中可用的脚本是nohup ssh oracle @ onprem-svcdb /home/oracle/test.sh,在运行脚本时询问oracle的密码,运行脚本时我不需要它是这样的它不需要询问密码,它需要在oracle中运行脚本。那我需要做什么?任何人都可以为此提供帮助

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您将获得使用连接到数据库并执行某些操作的脚本的密码提示。如果您不需要密码提示,则需要为登录用户在Linux机器上生成ssh的公钥和私钥,并在数据库中对其进行配置。请看下面的链接

http://docs.oracle.com/cd/E19253-01/816-4557/sshuser-33/index.html

您可以尝试以下

eMesh.transform

来源:https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:142212348066

答案 1 :(得分:0)

你可以尝试期待工具:

您将开始下面的脚本,它将启动您的主sql脚本作为回报,并在出现提示时发送 oracle 密码:

content of /tmp/expect.exp script:
#!/usr/bin/expect -f
# set Variables
set password '***'
set timeout -1

# what to execute
spawn /usr/bin/su oracle -c "/tmp/main_script.sh"
match_max 100000

# Look for passwod prompt
while {1 > 0 } {
expect "*?assword:*"

# Send password aka $password
send -- "$password\r"
}

# send blank line (\r) to make sure we get back to gui
send -- "\r"
expect eof

比你的主脚本存储在(或root home,无论你需要什么目录):

/tmp/main_script.sh content:
su - oracle
drop table; create table; other SQL commands

一个缺点是 - 纯文本密码,存储在脚本

如何安装:Here

或者您可以尝试修改visudo,例如:

user1    ALL=(user2) NOPASSWD: /bin/bash

其中:user1将被授予" su到user2"没有密码提示。你可以用ALL替换/ bin / bash然后你可以用user2

启动任何命令