以不同用户身份将环境变量传递到远程服务器

以不同用户身份将环境变量传递到远程服务器

我在 CentOS 服务器上通过 SSH 进入远程服务器时尝试设置环境变量。我以 root 身份运行命令,但需要它以 Oracle 用户身份运行命令。我在网站上找到了一些东西,但似乎都不起作用。

ssh $SERVER su $ORACLE_USER 'ORACLE_HOME="/u01/app/oracle/product/11.2.0"; PATH="/u01/app/oracle/product/11.2.0/Opatch:$PATH';  opatch lsiinventory'

有人可以帮我吗?

答案1

在大多数 shell 中,变量不会自动成为环境的一部分,除非它们出口那里(用 Bourne shell 术语来说)。对于 sh/bash,使用:

ssh $SERVER "su $ORACLE_USER -c 'export ORACLE_HOME=\"/u01/app/oracle/product/11.2.0\";
                                 export PATH=\"/u01/app/oracle/product/11.2.0/Opatch:\$PATH\";
                                 opatch lsiinventory'"

(在 bash 中,更改现有的环境变量(例如 $PATH)将自动重新导出它,但这不能保证在所有 shell 中都是如此。)

另请注意ssh 才不是保留参数分离并将所有内容作为单个参数发送(最终将其提供给/bin/sh -c "…")。为了避免混淆,最好首先只将单个命令参数传递给 ssh。

答案2

为什么不直接在远端系统上创建一个小型的 shell 脚本启动器并运行它呢:

#!/bin/bash
export ORACLE_HOME=/u01/app/oracle/product/11.2.0
exec $ORACLE_HOME/Opatch/opatch lsiinventory

将其保存到名为“oplauncher”chmod 755 的文件中,然后使用 ssh 登录并运行它。

相关内容