![SSH期间使用目标服务器中用户的环境变量](https://linux22.com/image/95806/SSH%E6%9C%9F%E9%97%B4%E4%BD%BF%E7%94%A8%E7%9B%AE%E6%A0%87%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%AD%E7%94%A8%E6%88%B7%E7%9A%84%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F.png)
我正在尝试写一个脚本服务器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'
会回声用户2到PATH
航站楼。
但是,您还需要知道,当您通过 ssh 运行命令时,~/.profile
是不是预先运行(参见讨论这里)。因此,如果您想访问 中定义的环境变量~/.profile
,请运行以下命令:
user1> ssh user2@server2 'source ~/.profile; $env'
警告:如果使用双引号 ( "
) 而不是单引号 ( '
),则 shell 运行方式为用户1将把双引号内的任何环境变量扩展为用户1的环境变量前命令通过 ssh 发送到用户2。