如何将值传递给 ssh 命令,以便在主机上启动的环境以我选择的某个环境变量开始?
编辑:目标是将当前的 kde 桌面(从 dcop kwin KWinInterface currentDesktop )传递到创建的新 shell,以便我可以将 nfs 位置传回原始服务器上的JEdit实例,这对于每个 KDE 桌面都是唯一的。(使用像emacsserver / emacsclient这样的机制)
多个 ssh 实例可以同时运行的原因是,当我设置环境时,我向不同的机器打开了一堆不同的 ssh 实例。
小智 79
该SendEnv
选项是你的男人。
~/.ssh/config: (本地)
SendEnv MYVAR
Run Code Online (Sandbox Code Playgroud)
/etc/ssh/sshd_config:(在远程端)
AcceptEnv MYVAR
Run Code Online (Sandbox Code Playgroud)
现在,无论 local 的值$MYVAR
是多少,它也可以在远程会话中使用。
如果您多次登录,每个会话都有自己的 副本$MYVAR
,可能有不同的值。
~/.ssh/environment
用于其他目的。它$ENV
在远程执行非 shell命令时充当文件。
小智 43
您可以使用类似于以下内容的命令传递值:
ssh username@machine VAR=value cmd cmdargs
Run Code Online (Sandbox Code Playgroud)
您可以使用以下方法进行测试:
ssh machine VAR=hello env
Run Code Online (Sandbox Code Playgroud)
在 tcsh 上,以下似乎有效:
ssh machine "setenv VAR <value>; printenv"
Run Code Online (Sandbox Code Playgroud)
Jay*_*son 35
还有一个可怕的,可怕的黑客。
如果您的脚本正在使用远程端的变量(即您可以随意命名),您可以滥用语言环境变量。任何形式为 LC_* 的变量都将逐字传递,无需任何配置。
例如,我们在我的一个客户端上有一系列堡垒服务器。我讨厌必须连接到它,只是为了连接到另一台服务器......和另一台服务器......每次。我有一个脚本,它的行为就像 SSH,只是它很聪明。
基本上,如果设置了 LC_BOUNCE_HOSTS,它会将其拆分为空格并剥离第一个主机。然后它反弹并运行相同的脚本。在目标节点上,这个列表最终是空的,所以它运行命令。我还有一个调试模式(在网络故障期间很好用),它由 LC_BOUNCE_DEBUG 设置。由于 ssh 神奇地为我传递了所有这些信息,除了识别主机列表的末尾(我使用 -- 选项执行此操作)之外,我无需执行任何其他操作。
每次使用这个我都觉得很脏,但它在我尝试过的任何地方都有效。
Joh*_*n T 29
该~/.ssh/environment
文件可用于设置您希望用于远程命令的变量。您必须PermitUserEnvironment
在 sshd 配置中启用。
以这种方式设置的变量会导出到子进程,因此您可以:
echo "Foo=Bar" > sshenv
echo "Joe=37" >> sshenv
scp sshenv user@server:~/.ssh/environment
ssh user@server myscript
Run Code Online (Sandbox Code Playgroud)
并且 myscript 会知道 Foo 是 Bar 而 Joe 是 37。
归档时间: |
|
查看次数: |
146964 次 |
最近记录: |