[英]How to substitute variables into bash script and then run on remote server in Linux
[英]How do I ssh into a server and run a bash script that requires bash variables and sshes into another server?
我嘗試過最流行的解決方案,即在ssh上使用-t參數並在bash初始化之前運行命令。 可悲的是,我試圖運行的腳本需要bash變量,所以這不是我的選擇。 這些是我嘗試過的方法:
方法1:
只是為了展示我在上面嘗試的內容:
ssh -A me@proxy -t 'echo 0 | /usr/local/bin/hop-server.sh <parameters> && bash -l'
它進入代理,然后它從腳本中吐出一些丟失的環境變量。
方法2:
將腳本添加到〜/ .bashrc中:
if [ "$HOP" = "dev1" ]; then
/usr/local/bin/hop-server.sh <parameters>
fi
並連接:
ssh -A me@proxy -t 'HOP=dev1 bash -l'
這不會導致環境變量丟失,但跳不成功,我陷入代理:
me@proxy:~$ ~/proxytodev1
Setting environment variables...
Setting project...
Resolving 'dev1'...
Connecting to 123.123.123.123...
Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.13.0-63-generic x86_64)
* Documentation: https://help.ubuntu.com/
Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud
17 packages can be updated.
9 updates are security updates.
me@proxy:~$
您可以使用ssh配置選項SendEnv
ssh -o 'SendEnv HOP' ...
請注意,必須將ssh服務器配置為接受它(sshd中的AcceptEnv
)。
或者,您可以使用服務器端的.ssh/environment
文件來設置要在ssh連接上出現的變量:
HOP=<destination>
要使服務器接受它,必須將PermitUserEnvironment
sshd config選項設置為true。
您可以使用以下語法將環境變量傳遞給進程:
foo=bar ./script.sh
將foo
設置為值bar
並將其傳遞給腳本。 您可以根據需要擁有盡可能多的name=value
對。
小心變量擴展; 根據您使用的引號,變量在本地擴展,然后發送到遠程端,或者按原樣發送,然后遠程擴展。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.