如何使用sshpass从本地ubuntu系统执行远程服务器上的脚本时从远程Ubuntu服务器获取环境变量?

时间:2018-01-18 09:03:04

标签: linux bash shell ubuntu ssh

如何从本地Ubuntu系统执行远程服务器上的脚本时从远程Ubuntu服务器获取环境变量?我为不同文件中的vagrant用户配置了很多环境变量。

我使用以下命令从本地Ubuntu系统执行脚本

sshpass -f .passwd ssh -o StrictHostKeyChecking=no -t vagrant@192.168.1.180 "sh script.sh"

.passwd文件包含密码

执行此脚本时,配置的环境变量不可用于脚本执行。我使用此命令获取了profile,.bash_profile,/ etc / profile等,例如。

sshpass -f .passwd ssh -o StrictHostKeyChecking=no -t vagrant@192.168.1.180 "source .bash_profile; sh script.sh"

请帮我解决这个问题。

注意:环境变量在直接ssh会话和脚本上也能正常工作。

2 个答案:

答案 0 :(得分:1)

-ibash

sh选项解决了这个问题。现在我能够在非交互式ssh连接中获得交互式ssh会话。

@marcolz @tripleee感谢您的帮助

sshpass -f .passwd ssh -o StrictHostKeyChecking=no -t vagrant@192.168.1.180 "bash -i  script.bash"

答案 1 :(得分:0)

如果您将-l传递给sh,它的行为就像是登录shell一样,并会获取您的shell资源文件,所以请尝试:

sshpass -f .passwd ssh -o StrictHostKeyChecking=no -t vagrant@192.168.1.180 "sh -l script.sh"