問(wèn)題
首先說(shuō)一下使用ssh遠(yuǎn)程連接服務(wù)器執(zhí)行命令的方法:
為了方便描述,這里把測(cè)試服務(wù)器稱之為A1废士,目標(biāo)服務(wù)器稱之為A2
- A1與A2之間首先要建立ssh免密登錄,在A1上生成公鑰和私鑰
ssh-keygen -t rsa -f id_rsa -P ''
- 獲取A1的公鑰
vim ~/.ssh/id_rsa.pub
- 將A1的公鑰拷貝到A2的authorized_keys文件中保存。注意一個(gè)公鑰中間不能有空格或換行坠宴!
- 在A1上驗(yàn)證免密登錄是否配置成功
ssh -p A2port A2user@A2ip
如果可以直接登錄到A2贬媒,則配置成功聋亡!
- 在A1遠(yuǎn)程連接A2執(zhí)行命令
ssh -p A2port A2user@A2ip "rm -fr test"
下面來(lái)說(shuō)問(wèn)題:
ssh在遠(yuǎn)程連接服務(wù)器執(zhí)行命令的時(shí)候,經(jīng)常會(huì)遇到環(huán)境變量的問(wèn)題际乘,如下:
/data/resin-pro-4.0.49/bin/resin.sh: line 44: exec: java: not found
如果出現(xiàn)上面的提示坡倔,則說(shuō)明環(huán)境變量配置有問(wèn)題。
先來(lái)說(shuō)解決辦法
解決
- 訪問(wèn)A2上/etc/profile文件脖含,拷貝文件中的環(huán)境變量罪塔,例如JAVA_HOME, PATH等等
- 將環(huán)境變量拷貝至~/.bashrc文件保存
source ~/.bashrc
問(wèn)題解決!
原因及拓展
這里就要說(shuō)明bash有兩種方式interactive + login shell模式和non-interactive + non-login shell模式
在服務(wù)器上執(zhí)行命令养葵,走的是interactive + login shell模式征堪,而通過(guò)遠(yuǎn)程登錄執(zhí)行命令,走的是non-interactive + non-login shell模式关拒。
這兩種模式對(duì)于環(huán)境變量的讀取是有區(qū)別的佃蚜。
- interactive + login shell模式
Shell首先會(huì)加載/etc/profile文件,然后再嘗試依次去加載下列三個(gè)配置文件之一着绊,一旦找到其中一個(gè)便不再接著尋找:
~/.bash_profile
~/.bash_login
~/.profile
- non-interactive + non-login shell模式
它不會(huì)去執(zhí)行/etc/profile文件谐算,而會(huì)去用戶的HOME目錄檢查.bashrc并加載
所以當(dāng)遠(yuǎn)程執(zhí)行命令時(shí),我們只需要讓~/.bashrc文件中的環(huán)境變量與/etc/profile中的環(huán)境變量一致即可归露!