#!/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 directorybash: p4: command not foundbash: line 0: cd: bin: No such file or directorybash: ./prog: No such file or directorytail: cannot open `../logs/service.log' for reading: No such file or directorytail: no files remaining解决方法 而不是通过ssh连接然后立即更改用户,你不能使用像ssh -t webservice_username @ remotehost1这样的东西来连接所需的用户名吗?这样就可以避免完全放弃sudo.
如果不可能,请尝试包装要在shell脚本中运行的所有命令并将其存储在远程计算机上.如果您可以通过脚本完成任务,那么您的ssh调用变得更加简单,并且遇到的问题会更少:
ssh myname@remotehost1 '/path/to/script'
为了便于更新此脚本,您可以为本地计算机编写一个简短脚本,通过scp上载最新版本,然后使用ssh调用它.
总结以上是内存溢出为你收集整理的linux – 如何编写一个bash shell脚本来ssh到远程机器并更改用户并导出一个env变量并执行其他命令全部内容,希望文章能够帮你解决linux – 如何编写一个bash shell脚本来ssh到远程机器并更改用户并导出一个env变量并执行其他命令所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)