2009-10-27 71 views
14

我想要一個命令ssh'es進入一臺機器,運行一個命令(cd或執行腳本或su),然後給我殼。傳遞給ssh的命令似乎總是退出。ssh與命令....加殼

什麼我在尋找一些例子: 「我的ssh @ MACHINE1‘./executeMyScript & & CD/developmentDirectory’」,然後它給了我我的背殼。

我想這樣做的原因是因爲我使用了mrxvt(tabbed x terms),它允許我爲啓動時執行的所有選項卡定義命令。我希望有一些ssh連接到同一臺機器,但讓他們在sshing之後做不同的事情。

-Rob

謝謝!

回答

10

變化真的,使用ssh的-t選項強制僞終端分配:

ssh -t [email protected] ./executeMyScript '&&' bash -i 
+0

謝謝!在第一次檢查時,該功能完全按照我的意願工作!爲「-t」歡呼! – robarson 2009-10-28 18:02:25

+0

即使這個問題得到了適當的回答,如果有人正在閱讀,你知道我怎樣才能擁有bash的實例,我從這個命令開始打開emacs(這樣當我關閉emacs時,它會返回到我的bash終端) ?哎呀..甚至打開emacs沒有bash的東西會很好(例如emacs在啓動後不會立即退出)。 – robarson 2009-10-29 15:15:18

4

如何

ssh [email protected] ./executeMyScript '&&' bash -i 

你必須引用&&所以它會被傳遞到遠程機器,而不是由當地殼吞噬。

引用一個​​3210字符,你可以改變你的啓動目錄,太:

ssh [email protected]achine ./executeMyScript '&&' cd /developmentDirectory ';' bash -i 
+0

謝謝。打電話給bash工作...因爲它給了我一個外殼。不幸的是,它不工作得很好..簡單的鍵盤快捷鍵,如CTRL^a不工作,這意味着我需要嘗試並找到不同的解決方案。順便說一句,它還打印出「bash:在這個shell中沒有作業控制」。 – robarson 2009-10-27 22:20:45

+3

嘗試使用'-t'選項:'ssh -t me @ machine ...' – mob 2009-10-27 23:04:31

2

把這樣的事情在腳本的末尾要運行:

bash -li 

啓動猛砸作爲交互式登錄外殼。這並不完美,因爲您會錯過TERM轉發等內容,但它可能足以滿足您的需求。

如果沒有足夠的,我只是讓兩個獨立的SSH調用,一個運行腳本和其他登錄我進去。

+0

+1兩個單獨的ssh命令。 KISS – 2009-10-28 10:59:17

2

如何使用ssh_config中的SendEnv選項發送一個特定的環境從本地機器到遠程機器的選項,然後檢查遠程主機配置中的環境變量?

在你的.ssh /特殊配置文件:

remotehost: 
    SendEnv * 

您當地的腳本:

RUN_THIS_FIRST_COMMAND=blah 
ssh -F special-config-file 

您的遠程.bash_profile文件:

if [ "$RUN_THIS_FIRST_COMMAND" != "" ] ; then 
    $RUN_THIS_FIRST_COMMAND 
fi 

您可能需要檢查其中的一些內容,我只是將它們從手冊中扔出來,之前沒有嘗試過。就我個人而言,我不喜歡爲此解決方案修改本地和遠程環境。在其他的答案

0

這對我的作品。

/usr/bin/ssh -t yourdomain.com "cd /directory; bash -i" 
+2

爲什麼它適合你?給予更多的細節,使OP能夠理解你爲什麼寫了你所做的事情。 – rayryeng 2014-08-08 19:01:50

+1

這也是一個或多或少直接複製現有的選擇答案,發佈4年前... – Synchro 2014-08-08 19:19:00

+0

解釋會很好。 – 2014-08-08 19:42:54