Chinaunix首页 | 论坛 | 博客
  • 博客访问: 228410
  • 博文数量: 47
  • 博客积分: 2455
  • 博客等级: 大尉
  • 技术积分: 558
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-25 15:43
文章分类

全部博文(47)

文章存档

2016年(2)

2012年(10)

2011年(13)

2010年(1)

2009年(19)

2008年(2)

分类:

2008-12-30 15:01:29

对于在Linux下工作的人来说, 经常需要使用ssh. 在使用控制台登录到远程机器上以后再执行操作的情况下,不存在使用环境变量的问题. 但是,对于不需要登录而直接用ssh在远程机器上执行命令的而言, 环境变量的使用就是一个问题了. 因为,远程机器的ssh server使用的是默认的环境变量,尤其是PATH. 比如我在当前机器abcn5上,执行echo $PATH,显示的是: "/opt/java/bin:/opt/intel/cce/10.1.015/bin:/usr/local/bin:/usr/bin:/bin:", 但是,我在其他机器上执行 ssh abcn5 'echo $PATH',显示的却是: "/usr/local/bin:/usr/bin:/bin".

对于需要自动化测试的人来说, 经常需要使用一台机器控制代码分布到各个远程机器上,并且在远程机器上执行测试. 既然是自动化,整个过程不需要人工的干预,即不需要使用控制台登录到远程机器. 这种情况, 工作都是通过使用ssh在远程机器上执行命令来完成的. 而经常, 所使用到的程序不在默认的PATH中, 许多需要的环境变量默认也不存在. 这种情况下, 就需要让ssh server能够接受自定义的环境变量(包括PATH).

要让SSH server接受自定义的环境变量,有以下3种方式,这三种方式都需要有一定的权限,比如对sshd_config的修改权限,ssh_config的修改权限,ssh server的安装权限等等,最好是具有sudo的权限. 对于产品内部测试而言, 一般测试人员都对使用的测试机器具有管理的权限,所以,这应该不是一个问题.

1 远程机器编译期设定,此点仅对PATH有效.
Open ssh的configure中有一个选项:  --with-default-path=, 这个就是用来设定ssh server的默认PATH的

2 远程机器上设定.
修改远程机器上的sshd_config,使得其具有以下行:
PermitUserEnvironment yes
而后,在远程机器~/.ssh/建立environment文件,并且使用name=value的形式,增加需要自定义的环境变量,ssh在远程机器上执行命令时,environment中设定的变量都是执行环境的一部分

3 本机设定发送给远程机器.
修改远程机器上的sshd_config,使得其具有以下行:
AcceptEnv .....
AcceptEnv 后面接可以自定义的环境变量的名称,多个间空格隔开,可以使用通配符,比如
AcceptEnv PATH USER APPNAME TCL* A?
修改本机的ssh_config使得具有以下行:
SendEnv .....
格式同上.
这种情况下,ssh将会将SendEnv指定的环境变量发送给远程机器,远程机器根据AcceptEnv中的定义, 接受符合的,用这些符合的代替以后的环境变量,成为执行环境的一部分.
阅读(4032) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~