2012-01-20 37 views
0

我正在編寫一個腳本,它將使用SCP或SFTP將文件從一臺服務器傳輸到另一臺服務器。區分不同類型的錯誤是非常重要的。在SCP或SFTP中捕獲錯誤

我的問題是,從SFTP和(特別是)SCP返回的錯誤代碼似乎沒有區分不同類型的錯誤。例如,當SCP-ing時,似乎我得到的錯誤代碼爲1,不管發生了什麼類型的錯誤(例如:perrmission denied,無法連接到主機,都返回錯誤代碼1) 。

對於SFTP或SCP,有沒有辦法可靠地確定發生的錯誤;而不必通過$ stderr進行解析並以這種方式提取錯誤?

回答

0

是的,使用一些腳本語言(即Perl,Python,Ruby等)和一些可以返回該信息的SFTP模塊。

例如:

#!/usr/bin/perl 
use Net::SFTP::Foreign; 
my $sftp = Net::SFTP::Foreign->new($host); 
$sftp->error and die "SFTP failed: " . $sftp->error; 
my $sftp->put("foo", "bar"); 
$sftp->error and die "put failed: " . $sftp->error; 
+1

謝謝!我實際上最終寫了一個函數,它獲取stdin,stdout,stderr和通過網絡命令的返回碼:ssh。我用net_ssh_object.open_channel,並做了一個channel.exec(命令)。但我肯定會檢查這個方法。 – user1160958