SSH期间使用目标服务器中用户的环境变量

SSH期间使用目标服务器中用户的环境变量

我正在尝试写一个脚本服务器1将使用执行用户1执行一些命令服务器2用户2

所以在服务器1如果我尝试使用执行以下命令用户1,我看不到环境变量用户2(定义在/home/user2/.profile

用户1>ssh user2@server2 "env"

因此我无法执行用户2使用 ssh 来自 server1 的特定命令。

注意:在 server1/user1 和 server2/user2 之间配置了正确的 ssh,如果我给出,我可以从 server1 查看在 server2 中运行的进程

用户1>ssh user2@server2 "ps -ef|grep user2"

答案1

太长了;博士

user1> ssh user2@server2 '$env'

长答案

您在运行 ssh 命令的第一个示例中缺少 a $...如果您确实输入了,ssh user2@server2 "env"那么 它将"env"保留为文字字符串,并且不会扩展为任何环境变量。

如果你想用户2使用执行命令用户2的环境变量,您需要传递一个字符串,该字符串在运行时将扩展为这些变量。例如:

user1> ssh user2@server2 'echo $PATH'

会回声用户2PATH航站楼。

但是,您还需要知道,当您通过 ssh 运行命令时,~/.profile不是预先运行(参见讨论这里)。因此,如果您想访问 中定义的环境变量~/.profile,请运行以下命令:

user1> ssh user2@server2 'source ~/.profile; $env'

警告:如果使用双引号 ( ") 而不是单引号 ( '),则 shell 运行方式为用户1将把双引号内的任何环境变量扩展为用户1的环境变量命令通过 ssh 发送到用户2

相关内容