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
謝謝,這改正了這個問題。我現在覺得很愚蠢,甚至沒有從頭開始嘗試STDERR。 後續工作:打印到STDERR的哪些好處提供超過STDOUT? –
@BrandonC程序通常將錯誤信息寫入'STDERR'並輸出到'STDOUT'。這並不是很明顯,爲什麼作者選擇將'ssh'的版本信息寫入'STDERR'。 – devnull