ssh遠(yuǎn)程連接服務(wù)器執(zhí)行命令

問(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,則配置成功!


image.png
  • 在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)境變量一致即可!

參考:
如何解決SSH遠(yuǎn)程執(zhí)行命令找不到環(huán)境變量的問(wèn)題

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容