ssh執(zhí)行遠程腳本遇到的坑

最新在搭建新的產(chǎn)品環(huán)境就遇到了一個坑睛蛛,使用js 的node-ssh module執(zhí)行遠程機器的sh腳本的時候發(fā)現(xiàn),無法獲取全局的環(huán)境變量撤防。我們知道linux機器的全局環(huán)境變量的設置是在/etc/profile這個文件中的。我在這個文件中添加了JAVA_HOME的環(huán)境變量许溅,并將java的bin目錄添加到了$PATH中,但是通過ssh執(zhí)行遠程腳本的時候拿到的JAVA_HOME的值是空的秉版,但是如果通過xshell工具ssh到遠程主機就可以拿到環(huán)境變量贤重,當時不理解是為什么?后臺通過查了一些資料才了解大致原因沐飘。

原來通過ssh執(zhí)行遠程的命令或者腳本和通過ssh登錄到遠程主機后在執(zhí)行腳本這兩種方式的bash模式不同游桩。bash工作模式主要分為:login + interactive,login + non-interactive 耐朴,non-login + interactive 借卧,non-login + non-interactive 。login 是指需要輸入用戶名和密碼登陸的 shell; interactive 顧名思義為交互式,命令的標準輸入與輸出為該 bash 綁定到的終端筛峭。

* login + interactive
  * 登陸 Linux 獲取的第一個 shell 
  * 通過 ssh user_name @ romote_ip 登陸獲取到的 shell 
  * 運行命令 bash -l 進入的 shell 
    * 首先讀取 /etc/profile 文件 
    * 再從下面三個文件讀取到第一個存在的文件
      ~/.bash_profile铐刘、~/.bash_login、~/.profile 
      etc/profile 會依次讀取 /etc/profile.d 下所有文件 
* login + non-interactive
  * 運行命令 bash -l script.sh 
    *配置文件讀取同上 該模式比較少用
* non-login + interactive 
  * 運行命令bash
    *  讀取 /etc/bash.bashrc
    *  讀取 ~/.bashrc文件 
* non-login + non-interactive
  * 運行命令 bash script.sh 
    * 讀取環(huán)境變量 $BASH_ENV 的值,導入該值的配置文件 
  • 通過SSH登錄后在執(zhí)行腳本
    這種方式使用的是Bash的interactive + login shell模式影晓。
    這種模式下回讀取優(yōu)先讀取/etc/profile的配置镰吵,所謂我設置的環(huán)境變量是能夠讀取到的。

  • 通過ssh遠程執(zhí)行腳本命令
    這個方式使用的是bash的non-login + non-interactive模式挂签。是不會讀取/etc/profile中的配置疤祭,所以我設置的環(huán)境變量是獲取不到的,于是我就去之前已經(jīng)搭建好的機器上查看了$BASH_ENV這個變量的值饵婆,發(fā)現(xiàn)是空的勺馆,這就很奇怪了,為什么這個值是空的ssh遠程執(zhí)行腳本的時候也能成功的拿到JAVA_HOME這個環(huán)境變量呢侨核? 后來發(fā)現(xiàn)是在~/.bashrc中文件中設置的草穆,但是按照上面的工作模式應該是不會讀取這個配置的,于是就又去查了一下資料搓译,從幫助文檔中找到了原因:

Bash attempts to determine when it is being run with its standard input connected to a network connection, 
as when executed by the remote shell daemon, 
usually rshd, or the secure shell daemon sshd.
If bash determines it is being run in this fashion,
it reads and executes commands from ~/.bashrc, 
if that file exists and is read‐ able.

大致的意思就是 bash 會判斷標準輸入是否關聯(lián)到 sshd 這樣的網(wǎng)絡鏈接上,如果是,會讀取 ~/.bashrc 配置文件悲柱。

所以要解決SSH遠程執(zhí)行命令時找不到自定義環(huán)境變量的問題,那么可以在登錄用戶的HOME目錄的.bashrc中添加需要的環(huán)境變量些己。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末豌鸡,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子段标,更是在濱河造成了極大的恐慌涯冠,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件怀樟,死亡現(xiàn)場離奇詭異功偿,居然都是意外死亡盆佣,警方通過查閱死者的電腦和手機往堡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門械荷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人虑灰,你說我怎么就攤上這事吨瞎。” “怎么了穆咐?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵颤诀,是天一觀的道長。 經(jīng)常有香客問我对湃,道長崖叫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任拍柒,我火速辦了婚禮心傀,結果婚禮上,老公的妹妹穿的比我還像新娘拆讯。我一直安慰自己脂男,他們只是感情好,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布种呐。 她就那樣靜靜地躺著宰翅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪爽室。 梳的紋絲不亂的頭發(fā)上汁讼,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機與錄音肮之,去河邊找鬼掉缺。 笑死,一個胖子當著我的面吹牛戈擒,可吹牛的內(nèi)容都是我干的眶明。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼筐高,長吁一口氣:“原來是場噩夢啊……” “哼搜囱!你這毒婦竟也來了?” 一聲冷哼從身側響起柑土,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤蜀肘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后稽屏,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扮宠,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年狐榔,在試婚紗的時候發(fā)現(xiàn)自己被綠了坛增。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片获雕。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖收捣,靈堂內(nèi)的尸體忽然破棺而出届案,到底是詐尸還是另有隱情,我是刑警寧澤罢艾,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布楣颠,位于F島的核電站,受9級特大地震影響咐蚯,放射性物質(zhì)發(fā)生泄漏童漩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一春锋、第九天 我趴在偏房一處隱蔽的房頂上張望睁冬。 院中可真熱鬧,春花似錦看疙、人聲如沸豆拨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽施禾。三九已至,卻和暖如春搁胆,著一層夾襖步出監(jiān)牢的瞬間弥搞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工渠旁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留攀例,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓顾腊,卻偏偏與公主長得像粤铭,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子杂靶,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容