當前位置:首頁 » 網頁前端 » ssh遠程執行腳本怎麼配置環境變數
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

ssh遠程執行腳本怎麼配置環境變數

發布時間: 2023-03-30 04:02:52

① ssh遠程連接伺服器執行命令

首先說一下使用ssh遠程連接伺服器執行命令的方法:
為了方便描述,這里把測試伺服器稱之譽芹灶為A1,目標伺服器稱之為A2

如果可以直接登錄到A2,則配置成功!

下面來說問題:
ssh在遠程連接伺服器執行命令的時候,經常會遇到環境變數的問題,如下:

如果出現上面的提示,則說明環境變數配置有問題。
先來說解決辦法

問題解決!

這里就要說明bash有兩種方式interactive + login shell模式和non-interactive + non-login shell模式
在伺服器上執行命令,走的是interactive + login shell模式,而通過遠程登錄執行命令,走的是non-interactive + non-login shell模式。
這兩種模式對於環境變數的讀取是有區別的。

Shell首先會載入/etc/profile文件,然後再嘗試依次去載入下列三個配置首薯文件之一,一旦找到其中一個便不再接著尋找:
~/.bash_profile
~/.bash_login
~/.profile

所慶扮以當遠程執行命令時,我們只需要讓~/.bashrc文件中的環境變數與/etc/profile中的環境變數一致即可!

參考:
如何解決SSH遠程執行命令找不到環境變數的問題

② SSH 連接過程設置環境變數

在使用 SSH 連接的過程中,可能世信需要設置一些環境變數,用於初始化,或搜汪輪者在連接過程中作為終端標記。

在這個過程中,會使用到以下兩個 Option:

需要在 sshd_config 中指定允許客戶端進行設置的變數名。

文件位置:

設置方法:通過 AcceptEnv 關鍵字來指定,可以使用通配符,如 LC_* 。

注意:設置之後需要重啟 SSD 服務。

在客戶端使用 SSH 連接伺服器時,通過以下方式指定參數。陵碼

(完)

③ 如何通過SSH命令設置遠程主機的環境變數

eof 中的都是在遠程主機上執行的命令,無法用變數賦值的形式將值取回本地。
我想到的一個辦法是將結果重定向到文件,然後取文件如閉內容。祥橡旁
具體也沒有環境測試,可以試試結尾的 eof >result,這樣result文件生成在本地。
若不行,則 find . -mmin -10 | wc -l >result,然後從遠謹橡程主機取result文件讀內容。

④ Linux-兩種ssh遠程執行命令方式載入環境變數區別

最近在編寫腳本的時候發現一個問題,在執行 kubectl -n kube-system get pods 這個命令的時候,通過 ssh root@ip command 和 ssh root@ip command 登錄後執行得到了不同的結果,

從上面可以看到哪賀SSH遠程執行獲取pods失敗了,但是shell窗口執行卻成功了,所以我們可以猜到兩者之間一定有什麼區別導致結果的不同。那麼區別在哪裡呢?通過研究發現兩者的環境變數存在區別,通過執行printenv可以查看所有設置的環境變數:

通過上面可以看到SSH遠程執行的時候是沒有KUBECONFIG這個環境變數,而Shell窗口是有的,為什麼有這個區別呢?這就要從Linux的bash的四種模式說起。
bash的四種模式:

從上面可以看出不同方式下載入的配置文件不同,那麼怎麼知道我們是載入了那些配置文襪凱件呢? 這里有一個驗證的方法,就是在上面的每個配置告緩喚文件中添加一句 echo $/etc/profile 這樣的命令,把每個文件的路徑列印出來。當配置文件被載入時,會輸出相應的文件名,本例中在兩個文件中加了該命令:/etc/pfoile, ~/.bashrc,然後使用不同SSH方式執行命令的結果如下。

只載入了.bashrc文件,未載入/etc/profile。

從輸出可以看到兩個配置都載入了,而KUBECONFIG只定義在/etc/profile中,沒有定義在.bashrc文件中,所以通過 ssh root@ip command 執行時沒有拿到KUBECONFIG這個環境變數從而導致報錯。知道原因後我們就可以將KUBECONFIG環境變數添加到.bashrc文件即可。

⑤ 怎麼設置 linux環境變數配置

Linux環境變數基礎配置說明

1
1、直接用export命令:
#export PATH=$PATH:/opt/au1200_rm/build_tools/bin
查看是否已經設好,可用命令export查看:
[root@localhost bin]# export
declare -x BASH_ENV="/root/.bashrc"
declare -x G_BROKEN_FILENAMES="1"
declare -x HISTSIZE="1000"
declare -x HOME="/root"
declare -x HOSTNAME="localhost.localdomain"
declare -x INPUTRC="/etc/inputrc"
declare -x LANG="zh_CN.GB18030"
declare -x LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
declare -x LESSOPEN="|/usr/bin/lesspipe.sh %s"
declare -x LOGNAME="root"
declare -x LS_COLORS="no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*NaNd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:"
declare -x MAIL="/var/spool/mail/root"
declare -x OLDPWD="/opt/au1200_rm/build_tools"
declare -x PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin:/opt/au1200_rm/build_tools/bin"
declare -x PWD="/opt/au1200_rm/build_tools/bin"
declare -x SHELL="/bin/bash"
declare -x SHLVL="1"
declare -x SSH_ASKPASS="/usr/libexec/openssh/gnome-ssh-askpass"
declare -x SSH_AUTH_SOCK="/tmp/ssh-XX3LKWhz/agent.4242"
declare -x SSH_CLIENT="10.3.37.152 2236 22"
declare -x SSH_CONNECTION="10.3.37.152 2236 10.3.37.186 22"
declare -x SSH_TTY="/dev/pts/2"
declare -x TERM="linux"
declare -x USER="root"
declare -x USERNAME="root"
可以看到,環境變數已經設好,PATH裡面已經有了我要加的編譯器的路徑。
2
2、修改profile文件:
#vi /etc/profile
在裡面加入:
export PATH="$PATH:/opt/au1200_rm/build_tools/bin"
讓環境變數立即生效需要執行如下命令:
#source /etc/profile
3
3. 修改.bashrc文件:
# vi /root/.bashrc
在裡面加入:
export PATH="$PATH:/opt/au1200_rm/build_tools/bin"
4
特別說明:
方法2、3
一般需要重新注銷系統才能生效,最後可以通過echo命令測試一下:
# echo $PATH
看看輸出裡面是不是已經有了/my_new_path這個路徑了。
END
Linux環境變數配置注意事項

1
標准位置及非標注位置環境變數:
對於:「/bin」、「/sbin」、「/usr/bin」、「/usr/sbin」、「/usr/local/bin」等路徑已經在系統環境變數中了,如果可執行文件在這幾個標准位置,在終端命令行輸入該軟體可執行文件的文件名和參數(如果需要參數),回車即可。
如果不在標准位置,文件名前面需要加上完整的路徑。
不過每次都這樣跑就太麻煩了,一個「一勞永逸」的辦法是把這個路徑加入環境變數。命令 「PATH=$PATH:路徑」可以把這個路徑加入環境變數,但是退出這個命令行就失效了。要想永久生效,需要把這行添加到環境變數文件里。有兩個文件可選:「/etc/profile」和用戶主目錄下的「.bash_profile」,「/etc/profile」對系統里所有用戶都有效,用戶主目錄下的「.bash_profile」只對這個用戶有效。
「PATH=$PATH:路徑1:路徑2:...:路徑n」,意思是可執行文件的路徑包括原先設定的路徑,也包括從「路徑1」到「路徑n」的所有路徑。當用戶輸入一個一串字元並按回車後,shell會依次在這些路徑里找對應的可執行文件並交給系統核心執行。那個「$PATH」表示原先設定的路徑仍然有效,注意不要漏掉。某些軟體可能還有「PATH」以外類型的環境變數需要添加,但方法與此相同,並且也需要注意「$」。
2
注意,與DOS/Window不同,Linux類系統環境變數中路徑名用冒號分隔,不是分號。另外,軟體越裝越多,環境變數越添越多,為了避免造成混亂,建議所有語句都添加在文件結尾,按軟體的安裝順序添加。
格式如下():
# 軟體名-版本號
PATH=$PATH:路徑1:路徑2:...:路徑n
其他環境變數=$其他環境變數:...
在「profile」和「.bash_profile」中,「#」是注釋符號,寫在這里除了視覺分隔外沒有任何效果。
設置完畢,注銷並重新登錄,設置就生效了。如果不注銷,直接在shell里執行這些語句,也能生效,但是作用范圍只限於執行了這些語句的shell。
相關的環境變數生效後,就不必老跑到軟體的可執行文件目錄里去操作了。
END
Linux配置示例:配置java環境變數

1
1.修改/etc/profile文件
如果你的計算機僅僅作為開發使用時推薦使用這種方法,因為所有用戶的shell都有權使用這些環境變數,可能會給系統帶來安全性問題。

(1)用文本編輯器打開/etc/profile

(2)在profile文件末尾加入:
JAVA_HOME=/usr/share/jdk1.5.0_05
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH

(3)重新登錄

註解:
a. 你要將 /usr/share/jdk1.5.0_05jdk 改為你的jdk安裝目錄

b. linux下用冒號「:」來分隔路徑

c. $PATH / $CLASSPATH / $JAVA_HOME 是用來引用原來的環境變數的值,在設置環境變數時特別要注意不能把原來的值給覆蓋掉了,這是一種常見的錯誤。

d. CLASSPATH中當前目錄「.」不能丟,把當前目錄丟掉也是常見的錯誤。

e. export是把這三個變數導出為全局變數。

f. 大小寫必須嚴格區分。
2
2. 修改.bashrc文件
這種方法更為安全,它可以把使用這些環境變數的許可權控制到用戶級別,如果你需要給某個用戶許可權使用這些環境變數,你只需要修改其個人用戶主目錄下的.bashrc文件就可以了。

(1)用文本編輯器打開用戶目錄下的.bashrc文件

(2)在.bashrc文件末尾加入:
set JAVA_HOME=/usr/share/jdk1.5.0_05
export JAVA_HOME
set PATH=$JAVA_HOME/bin:$PATH
export PATH
set CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export CLASSPATH

(3)重新登錄
3
3. 直接在shell下設置變數
不贊成使用這種方法,因為換個shell,你的設置就無效了,因此這種方法僅僅是臨時使用,以後要使用的時候又要重新設置,比較麻煩。

只需在shell終端執行下列命令:
export JAVA_HOME=/usr/share/jdk1.5.0_05
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
END
LinuxRedHat 9.0環境變數配置

變數簡介
Linux 是一個多用戶的操作系統。每個用戶登錄系統後,都會有一個專用的運行環境。通常每個用戶默認的環境都是相同的,這個默認環境實際上就是一組環境變數的定義。用戶可以對自己的運行環境進行定製,其方法就是修改相應的系統環境變數。
常見的環境變數
$PATH:決定了shell將到哪些目錄中尋找命令或程序
$HOME:當前用戶主目錄
$MAIL:是指當前用戶的郵件存放目錄。
$SHELL:是指當前用戶用的是哪種Shell。
$HISTSIZE:是指保存歷史命令記錄的條數
$LOGNAME:是指當前用戶的登錄名。
$HOSTNAME:是指主機的名稱,許多應用程序如果要用到主機名的話,通常是從這個環境變數中來取得的。
$LANG/LANGUGE:是和語言相關的環境變數,使用多種語言的用戶可以修改此環境變數。
$PS1:是基本提示符,對於root用戶是#,對於普通用戶是$,也可以使用一些更復雜的值。
$PS2:是附屬提示符,默認是「>」。可以通過修改此環境變數來修改當前的命令符,比如下列命令會將提示符修改成字元串「Hello,My NewPrompt :) 」。
# PS1=" Hello,My NewPrompt :) "
$IFS:輸入域分隔符。當shell讀取輸入時,用來分隔單詞的一組字元,它們通常是空格、製表符和換行符。
$0:shell腳本的名字。
例如,在我的Linux系統中:
$ echo $0
/bin/bash
$#:傳遞給腳本的參數個數。

:shell腳本的進程號,腳本程序通常會用它生成一個唯一的臨時文件,如/tmp/tmfile_

例如,在我的Linux系統中:
$ echo $$
31038 #表示當前shell進程號為31038
export命令
export命令將作為他參數的變數導入到子shell中,並使之在子shell中有效。export命令把自己的參數創建為一個環境變數,而這個環境變數可以被其他腳本和當前程序調用的程序看見。
4.1 實驗 導出變數
(1)我們先列出腳本程序export2
#!/bin/sh
echo "$foo"
echo "$bar"
(2)然後是腳本export1。在這個腳本的結尾,我們調用export2:
#!/bin/sh
foo="The first meta-syntactic variable"
export bar="The second meta-syntactic variable"
export2
運行這個腳本,將得到如下的輸出:
$ export1
#這是個空格,是因為變數foo在export2中不可用,所以$foo被復制為空
The second meta-syntactic variable
$
4.2 設置一個新的環境變數WELCOME
$ export WELCOME="Hello!"
$ echo $WELCOME
Hello!
定製環境變數
環境變數是和 Shell 緊密相關的,用戶登錄系統後就啟動了一個 Shell 。對於 Linux 來說一般是 bash ,但也可以重新設定或切換到其它的 Shell 。根據發行版本的情況, bash 有兩個基本的系統級配置文件: /etc/bashrc 和 /etc/profile 。這些配置文件包含兩組不同的變數: shell 變數和環境變數。前者只是在特定的 shell 中固定(如 bash ),後者在不同 shell 中固定。很明顯, shell 變數是局部的,而環境變數是全局的。環境變數是通過 Shell 命令來設置的,設置好的環境變數又可以被所有當前用戶所運行的程序所使用。對於 bash 這個 Shell 程序來說,可以通過變數名來訪問相應的環境變數,通過 export 來設置環境變數。下面通過幾個實例來說明。
5.1 使用命令echo 顯示環境變數
#本例使用echo顯示常見的變數HOME
$ echo $HOME
/home/lqm
5.2 設置一個新的環境變數
$ export HELLO=「Hello!」
$ echo $HELLO
Hello!
5.3 使用 env 命令顯示所有的環境變數
$ env
SSH_AGENT_PID=1875
HOSTNAME=lqm
SHELL=/bin/bash
TERM=xterm
HISTSIZE=1000
……
5.4 使用set 命令顯示所有本地定義的Shell 變數
$ set
BASH=/bin/bash
……
5.5 使用 unset 命令來清除環境變數
$ export TEST=「test」 # 增加一個環境變數 TEST
$ env | grep TEST # 此命令有輸出,證明環境變數 TEST 已經存在了
TEST=test
$ unset $TEST #刪除環境變數TEST
$ env | grep TEST # 此命令無輸出,證明環境變數 TEST 已經存在了
5.6 使用 readonly 命令設置只讀變數
如果使用了 readonly 命令的話,變數就不可以被修改或清除了。示例如下:
$ export TEST="Test" # 增加一個環境變數 TEST
$ readonly TEST #將環境變數TEST設為只讀
$ unset TEST #會發現此變數不能被刪除
-bash: unset: TEST: cannot unset: readonly variable
$ TEST="New" #會發現此變數不能被修改
-bash: TEST: readonly variable
5.7 用C 程序來訪問和設置環境變數
對於 C 程序的用戶來說,可以使用下列三個函數來設置或訪問一個環境變數。
getenv() 訪問一個環境變數。輸入參數是需要訪問的變數名字,返回值是一個字元串。如果所訪問的環境變數不存在,則會返回 NULL 。
setenv() 在程序裡面設置某個環境變數的函數。
unsetenv() 清除某個特定的環境變數的函數。
另外,還有一個指針變數 environ ,它指向的是包含所有的環境變數的一個列表。下面的程序可以列印出當前運行環境裡面的所有環境變數:
#include <stdio.h>
extern char**environ;
int main ()
{
char**var;
for (var =environ;*var !=NULL;++var)
printf ("%s \n ",*var);
return 0;
}
5.8 通過修改環境變數定義文件來修改環境變數。
需要注意的是,一般情況下,這僅僅對於普通用戶適用,避免修改根用戶的環境定義文件,因為那樣可能會造成潛在的危險。
$vi /etc/bashrc #修改shell變數
$vi /etc/profile #修改環境變數定義文件
然後編輯你的 PATH 聲明,其格式為:
PATH=$PATH:<PATH 1>:<PATH 2>:<PATH 3>:------:<PATH N>
你可以自己加上指定的路徑,中間用冒號隔開。
環境變數更改後,在用戶下次登陸時生效,如果想立刻生效,
則可執行下面的語句:$ source .bash_profile
5
定製環境變數需要注意的是,最好不要把當前路徑 「./」 放到 PATH 里,這樣可能會受到意想不到的攻擊。完成後,可以通過 $ echo $PATH 查看當前的搜索路徑。這樣定製後,就可以避免頻繁的啟動位於 shell 搜索的路徑之外的程序了。