如何通过 ssh 命令传递环境变量?

如何通过 ssh 命令传递环境变量?

我如何将一个值传递给 ssh 命令,以便在主机上启动的环境以我选择的某个环境变量启动?

编辑:目标是将当前的 kde 桌面(来自 dcop kwin KWinInterface currentDesktop )传递给新创建的 shell,以便我可以将 nfs 位置传回给我的編輯原始服务器上的实例对于每个 KDE 桌面都是唯一的。(使用类似emacs服务器/emacs客户端

之所以可以同时运行多个 ssh 实例,是因为当我设置环境时,我会在不同的机器上打开一堆不同的 ssh 实例。

答案1

~/.ssh/environment文件可用于设置您希望远程命令可用的变量。您必须PermitUserEnvironment在 sshd 配置中启用它。

以这种方式设置的变量将导出到子进程,因此您可以:

echo "Foo=Bar" > sshenv
echo "Joe=37" >> sshenv
scp sshenv user@server:~/.ssh/environment
ssh user@server myscript

并且 myscript 会知道 Foo 是 Bar 而 Joe 是 37。

答案2

选择SendEnv权在你手里。

〜/.ssh /配置:(本地)

SendEnv MYVAR

在 /etc/ssh/sshd_config 中:(在远端)

AcceptEnv MYVAR

现在,无论本地的值$MYVAR是什么,它在远程会话中也可用。
如果您多次登录,则每个会话都会有自己的副本$MYVAR,并且值可能不同。

~/.ssh/environment$ENV用于其他目的。它在执行时充当文件无壳远程命令。

答案3

您可以使用类似如下的命令传递值:

ssh username@machine VAR=value cmd cmdargs

您可以使用以下方法进行测试:

ssh machine VAR=hello env

在 tcsh 上,以下操作似乎有效:

ssh machine "setenv VAR <value>; printenv"

答案4

bla="MyEnvSelection=dcop"
ssh user@host "export $bla && ./runProg"

在 bash 上我测试了:

$ echo '#!/bin/sh' > readEnv.sh
$ echo 'echo "MyEnv: "$MyEnvFromSSH' >> readEnv.sh

$ scp readEnv.sh user@host:~/
$ bla="MyEnvFromSSH=qwert"
$ ssh user@host "export $bla && ./readEnv.sh"

相关内容