2013-10-01 59 views
3

我正在嘗試將無密碼ssh從72個遠程服務器的測試自動化回中央服務器。我有中央服務器無密碼的ssh工作到72臺服務器,但需要它從他們的工作中心服務器。將ssh -V保存到變量

72臺服務器有兩個ssh版本之一。

OpenSSH_4.3p2,OpenSSL的0.9.8e - FIPS的RHEL5 2008年7月01日

OR

sshg3:SSH Tectia客戶端6.1.8在x86_64-未知Linux的GNU
體形:136
產品:SSH Tectia客戶端許可證
類型:商業

的問題,我一個M的經驗是試圖將ssh -V變成一個變量,看來它不打印到STDOUT。因此我下面的嘗試失敗了。

ssh -V > someFile.txt 
ssh_version=$(ssh -V) 

我怎樣才能輕鬆節省SSH的輸出-V,以便相應的SSH批次選項可以叫什麼名字?

以下是我用於遠程測試的腳本。

#!/bin/sh 
ssh -V > /tmp/ssh_version_check.txt 

cat /tmp/ssh_version_check.txt | grep "OpenSSH" 
rc=$? 

if [[ $rc == 0 ]] 
then 
    ssh -o BatchMode=yes <central_server> "test -d /tmp" 
    rc=$? 
    if [[ $rc != 0 ]] 
    then 
      echo "$(hostname) failed" >> /tmp/failed_ssh_test.txt 
    fi 
else 
    ssh -B <central_server> "test -d /tmp" 
    rc=$? 
    if [[ $rc != 0 ]] 
    then 
      echo "$(hostname) failed" >> /tmp/failed_ssh_test.txt 
    fi 
fi 

回答

3

ssh -V輸出到STDERR,不STDOUT

與其說

ssh -V > /tmp/ssh_version_check.txt 

的說

ssh -V >& /tmp/ssh_version_check.txt 

ssh -V > /tmp/ssh_version_check.txt 2>&1 

爲了保存到一個變量,說:

ssh_version=$(ssh -V 2>&1) 
+0

謝謝,這改正了這個問題。我現在覺得很愚蠢,甚至沒有從頭開始嘗試STDERR。 後續工作:打印到STDERR的哪些好處提供超過STDOUT? –

+0

@BrandonC程序通常將錯誤信息寫入'STDERR'並輸出到'STDOUT'。這並不是很明顯,爲什麼作者選擇將'ssh'的版本信息寫入'STDERR'。 – devnull