通过ssh声明变量

时间:2018-06-01 17:20:59

标签: linux bash ssh

是否可以通过ssh声明一个全局变量,以便可以从其他ssh连接访问它?举个例子 ssh firas@10.0.0.1“x = 10” 另一个用户x可以通过sshing到机器来回显值x = 10 ssh x@10.0.0.1“echo $ x”

2 个答案:

答案 0 :(得分:4)

不是直接的,但如果您使用OpenSSH则相当容易。首先,启用 在PermitUserEnvironment配置中sshd并重新启动sshd。意识到 man sshd_config中描述的可能的安全隐患:

 PermitUserEnvironment
         Specifies whether ~/.ssh/environment and environment= options in ~/.ssh/authorized_keys are processed
         by sshd(8).  The default is no.  Enabling environment processing may enable users to bypass access
         restrictions in some configurations using mechanisms such as LD_PRELOAD.

现在您将新变量保存到~/.ssh/environment

ssh localhost 'echo variable=new-value-of-the-var > ~/.ssh/environment'

另一位用户可以阅读:

$ ssh localhost 'echo $variable'
new-value-of-the-var

请注意,您需要使用单引号'代替",以防止shell在将$variable传递给ssh之前展开{。}}。

但是,如果您使用dropbear,它将无法运作:http://lists.ucc.gu.uwa.edu.au/pipermail/dropbear/2007q3/000615.html

答案 1 :(得分:2)

简短回答是

当您进入主机时,您的会话会生成子shell(子进程)以进行操作。子进程的父进程将是远程计算机上的shell。

孩子不能影响其父母的环境。

因此,生成的用于处理ssh连接的任何子shell都无法设置在关闭连接后将保留的任何变量。

注意:但是,您可以写入主机上的文件,然后该文件可用于后续连接。