簡體   English   中英

如何進入服務器並運行需要bash變量和sshes到另一台服務器的bash腳本?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM