簡體   English   中英

在 ssh 命令中使用遠程服務器的環境變量

[英]use environment variables of remote server in ssh command

我有兩台服務器 X(主機)和 Y(遠程)。 腳本 abc.sh 保存在 Y 服務器上。 我正在使用 ssh 命令從服務器 X 運行 abc.sh。

腳本運行成功,但包含服務器 Y 的環境變量(保存在 /.bash_profile 中)的命令給出空白輸出。

當我從服務器 Y 本身運行 abc.sh 時,所有命令都成功運行。

我的問題是如何包含遠程服務器(Y)的環境變量,以便完整腳本能夠成功執行。

注意:我沒有對 etc 目錄的寫訪問權限,因此我無法更改其中的任何內容。

提前致謝!

您可以包含您的環境變量,如下所示:

ssh user@host_y 'source ~/.bash_profile; /path/to/your/script/abc.sh'

由於直接命令運行不是交互式 shell,因此您的變量將無法在那里工作。 source將在您當前的 shell 中運行腳本,並將該文件中的可見環境變量添加到您的腳本中。

我使用 ssh 連接遠程機器運行一些 cron 作業。 代碼無法加載所有環境變量。 如果我在那台機器上運行代碼,它就可以工作。 我嘗試了幾種對我不起作用的方法。 最后,我在~/.bashrc文件中的下面~/.bashrc行注釋。 這個對我有用。

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

ssh 連接打開一個非交互式外殼。 因此,如果您注釋或刪除此塊代碼,它將為非交互式 shell 加載環境變量。

或者,您可以將所有所需的環境行代碼放在該行上方。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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