linux 切换env,linux – 如何编写一个bash shell脚本来ssh到远程机器并更改用户并导出一个env变量并执行其他命令...

我有一个在多个不同的远程redhat机器上运行的web服务.每当我想要更新服务时,我将从版本控制库(我使用perforce)同步下来用perl编写的新web服务源代码,并使用新的同步下行perl代码重新启动服务.我认为一个接一个地登录远程机器并执行一系列命令以逐个重新启动服务实在太无聊了.所以我写了一个像下面这样的bash脚本update.sh,以便“一次做一次,更新所有机器”.我将在本地计算机上运行此shell脚本.但它似乎无法奏效.它只执行第一个命令“sudo -u webservice_username -i”,因为我可以从本地机器的命令行中查看. (下面的代码仅显示了它将如何更新远程Web服务之一.“export P4USER = myname”用于perforce客户端的使用)

#!/bin/sh

ssh myname@remotehost1 'sudo -u webservice_username -i ; export P4USER=myname; cd dir ; p4 sync ; cd bin ; ./prog --domain=config_file restart ; tail -f ../logs/service.log'

为什么我知道唯一的第一个命令被执行?好吧,因为我在本地机器上输入ssh的密码后,显示:

Your environment has been modified. Please check /tmp/webservice.env.

而它只是卡在那里.我的意思是没有回报.

正如评论员的建议,我为ssh添加了“-t”

#!/bin/sh

ssh -t myname@remotehost1 'sudo -u webservice_username -i ; export P4USER=myname; cd dir ; p4 sync ; cd bin ; ./prog --domain=config_file restart ; tail -f ../logs/service.log'

这将让本地命令行返回.但它似乎很奇怪,它不能cd到那个“dir”,它说“cd:dir:没有这样的文件或目录”它也说“p4:command not found”.所以看起来sudo -u命令执行没有任何效果,导出命令没有执行或执行没有任何效果.

详细的本地日志文件如下所示:

Your environment has been modified. Please check /tmp/dir/.env.

bash: line 0: cd: dir: No such file or directory

bash: p4: command not found

bash: line 0: cd: bin: No such file or directory

bash: ./prog: No such file or directory

tail: cannot open `../logs/service.log' for reading: No such file or directory

tail: no files remaining

解决方法:

而不是通过ssh连接然后立即更改用户,你不能使用像ssh -t webservice_username @ remotehost1这样的东西来连接所需的用户名吗?这样就可以避免完全放弃sudo.

如果不可能,请尝试包装要在shell脚本中运行的所有命令并将其存储在远程计算机上.如果您可以通过脚本完成任务,那么您的ssh调用变得更加简单,并且遇到的问题会更少:

ssh myname@remotehost1 '/path/to/script'

为了便于更新此脚本,您可以为本地计算机编写一个简短脚本,通过scp上载最新版本,然后使用ssh调用它.

标签:bash,linux,ssh,perforce,redhat

来源: https://codeday.me/bug/20190630/1333193.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值