Linux上有關ssh的那個問題

Linux系統環境信息讀取的順序,ssh執行遠程腳本的坑、gradle遠程部署的坑

問題描述:

1.hadoop集羣一臺一臺的啓動太麻煩了,因此copy個腳本(內容:通過ssh連接每臺服務器,啓動對應的服務),希望在一臺機器上執行腳本,可以將整個集羣啓動、但不幸的是:當前機器是啓動成功的,但其他的機器都是失敗的並且顯示沒有對應的環境變量,很奇怪?

2. 項目中使用到了gradle,裏面通過’org.hidetake.ssh’的插件來編寫gradle task的遠程部署腳本(簡單來說:執行gradle task任務,gradle task裏面的內容是:通過ssh連接服務器,執行shell腳本,自動部署本地項目到服務器),這裏腳本里面需要執行gradle build進行打包,一到這裏就報錯,同樣顯示沒有gradle的環境變量

問題原因:

出現上面兩個問題的關鍵就在於: ssh 的關係

爲什麼?

原來通過ssh執行遠程的命令或者腳本和通過ssh登錄到遠程主機後在執行腳本這兩種方式的bash模式不同。

兩者的不同:
1.登錄Shell:就是你手動使用CRT登錄Linux的時候。此種情形,系統環境信息的讀取順序:/etc/profile、/.bash_profile、/.bash_login、~/.profile
2.非登錄Shell:就是你使用ssh登錄某臺機器的時候。此種情形,系統環境信息的讀取順序:/etc/bash.bashrc、~/.bashrc

我們在配置環境變量的時候,都是/etc/profile下面,所以~/.bashrc下面肯定沒有環境變量了

這裏提一點小意見:最好不要使用root用戶,如果更改root用戶的~/.bashrc裏面的內容,可能會出現別的錯誤

解決辦法:

在每臺服務器上執行:
cat /etc/profile >> ~/.bashrc
source ~/.bashrc

感謝:ssh執行遠程腳本遇到的坑

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章