2016-07-25 178 views
2

我想在本地系統上運行一個命令,同時我在bash中向遠程系統sshd。有沒有辦法做到這一點?這就是我想要的:在bash上在ssh上運行命令

#!/bin/bash 

ssh [email protected] <<'SSH' 
#Do something 
#Run a command here on local machine and not on machine I have sshed to 
#Do Something 

exit 
SSH 

編輯:我想呼應的一些消息,因爲回聲命令的輸出將不會從遠程計算機顯示,我想從本地運行。

+2

你可以做另一種方式:保持本地和發送命令到遠程 – stzahi

+3

你究竟* *試圖做什麼?雖然回答這個問題可能會讓你繼續處理它,但這聽起來像一個[XY問題](http://mywiki.wooledge.org/XyProblem)。如果您向我們提供更多信息,我們完全可以幫助您以更好的方式解決問題。 – ghoti

+0

我增加了我想要做的更多細節 –

回答

2

如果你可以改變腳本,您可以使用,一個expect腳本 - expect_example_and_tips

這可以讓你啓動一個「的ssh進程」,其可以發送命令到遠程機器上,而仍然在運行本地機器。

#!/usr/bin/env python 

import pexpect 

PROMPT = "\$|\%|\>" 
ssh_cmd = "ssh [email protected]" 

try: 
    ssh = pexpect.spawn(ssh_cmd) 
    ssh.sendline("echo hello on remote") 
    ssh.expect(PROMPT) 
    print "hello on local machine" 
    ssh.close() 

except Exception as e: 
    print e 
    sys.exit(2) 
+0

我只是想在運行遠程命令時回顯一些內容。 –

+0

因此,請使用expect來按我的建議運行遠程命令,並且可以根據需要進行回顯,因爲您在本地計算機上。恐怕我不知道另一種方法來繞過這個 - 我在Bash中使用pexpect模塊在Python中首先執行相同的操作 - 使用起來非常方便。 – tomereli

+0

所以你的答案是「你可以使用這個其他工具,這裏有一個鏈接,但我不會使用這個或你所問的東西,我會使用其他東西,我沒有提供完整的例子「?呃...你會不會改善你的回答? – ghoti

5

當您使用SSH,關鍵序列<enter>~是一種逃避的前綴,使您可以暫停SSH和發送鍵序列到SSH客戶端:例如 -

雖然在我看來

在Python更加簡單。在主機端。 序列號<enter>~<ctrl + z>將暫停(停止)ssh-client作業,並讓您在調用系統中提示。鍵入fg(如果您在Unix shell中)將在以後恢復您的ssh會話。

您可以通過鍵入<enter>~?來查看其他ssh轉義序列。 順序<enter>~.將終止連接,並且在會話在遠程計算機上被鎖定時非常方便。

(與使用~作爲一個死鍵組成的口音和雙字母組合的非美國鍵盤佈局用戶有,顯然,在所有這些序列類型~兩次)

這些序列是利用從當您正在操作SSH會話和d typign命令,而不是腳本。

由於您似乎希望在腳本中使用該方法,因此直接的解決方案是將ssh命令包含回原始主機。

+0

我基本上想在自動腳本中迴應一些東西。 echo不會在遠程計算機上運行 –

+0

否 - 這些序列適用於在終端「活動」的情況,而不適用於腳本。 – jsbueno

相關問題