2013-05-14 88 views
0

我想自動登錄防火牆服務器上,導出了一些日誌,SCP日誌以本地主機,然後從遠程服務器中刪除(防火牆服務器)從交流程序執行遠程主機上的命令

的過程我還啓用了基於主機的身份驗證,以便兩臺機器都可以在進行ssh-ing和傳輸時無需輸入任一機器的密碼即可進行通信。

我開始使用系統調用,認爲它可以工作,但它似乎並不像預期的那樣工作。我所做的就是這樣的事情

system(ssh [email protected]) 
system(cd /directory) 
system(fwm logexport) 
system(scp log [email protected]:/home) 
system(rm log) 

人誰在過去試過這個就知道這是不行的,但我不知道解決辦法或可能完成任務的不同方式。

謝謝!

+0

正在尋找最難的方法來做到這一點?爲什麼是C?例如,系統會產生一個shell,無論你的CD如何,對C程序來說都沒有任何意義。 – Duck

+0

那麼最新的系統()的替代? – laitha0

+0

我不是系統管理員,但是這看起來像'期待'是完美的。 http://en.wikipedia.org/wiki/Expect – Duck

回答

0

這是如何能夠有效地完成,在bash腳本做以下

#!/bin/bash 
ssh [email protected] 'bash -l' < ~/dowork.sh 

的「dowork.sh」的劇本是要在遠程機器上執行的是什麼,你必須打破那些最多兩個腳本和dowork.sh重定向到SSH執行命令

來驗證你有一個shell到正確的機器時,這樣做是「dowork.sh」

#!/bin/bash 
echo $PATH 

,這會給你從遠程機器的路徑變量。

2

每個system命令都會打開新進程,以便您的ssh會話在第二次調用中消失。嘗試做一個命令,如果你真的想用system

ssh server <some commands on server side>

scp <path on server> <local path>

編輯: 嘗試

ssh server 'cd /directory && touch test123'

在命令行上。這應該在目錄/directory的遠程服務器上創建文件test123。然後將此命令放入您的system(...)調用中。通過這種方式,您可以在遠程主機上執行命令。對於每個新system通話則必須再次ssh server <commands>做...

如果你不需要它在C程序中,你可以在bash腳本直接把這些命令:

#!/bin/bash 
ssh server 'cd /directory && touch test123' 
scp server:/directory/test123 /home/me/log123 
+0

我試過了,它將最終運行本地主機上的其他命令,而不是在遠程主機上運行。我不堅持使用系統我可以使用替代方案,如果你有不同的想法 – laitha0

+0

bash腳本或期望是我可能會用到的,顯然通過C程序來執行它是一件麻煩事。 – laitha0

+0

解決方案的問題是,它進入遠程機器ssh,然後我在遠程機器上得到提示,但腳本的其餘部分不會遠程執行,它會等待我鍵入退出並退出ssh然後它會在本地執行其餘的命令。我儘可能地像你說的那樣儘量不要太複雜,我只是在遠程設備上創建了一個testfile.txt文件,然後嘗試cd到它的位置並刪除它。 – laitha0

0

猛砸肯定的是要走的路!您可以將這些命令直接粘貼到腳本中,如果您已正確設置了身份驗證,則該腳本應該可以正常工作。

該腳本會是這個樣子:

#!/bin/bash 
ssh [email protected] 
cd /directory 
fwm logexport 
scp log [email protected]:/home #Possible mistake 
rm log 

現在我已經通過您的代碼看起來有可能是一個誤解。我認爲你應該將log移回到你從ssh -ed變成firewallserver的原始機器。

如果是這種情況,您的scp調用中不能使用localhost,因爲這是firewallserver。您需要scp log [email protected]<your local IP>才能將日誌恢復到您登錄的計算機。

也許我誤解了,如果是這樣的話,那麼我上面發佈的腳本應該可以工作。但是,如果我是正確的,那麼只需交換scp行,那應該工作。

+0

解決方案的問題是,它進入遠程計算機ssh就好了,然後我得到一個提示在遠程機器上,但腳本的其餘部分不會遠程執行,它將等待我鍵入exit並退出ssh,然後它將在本地執行其餘命令。我儘可能地像你說的那樣儘量不要太複雜,我只是在遠程設備上創建了一個testfile.txt文件,然後嘗試cd到它的位置並刪除它。 – laitha0

+0

這工作得很好,它只是不是我想要的 – laitha0

+0

ssh user @ firewallserver'bash -s' laitha0