我正在尝试将无密码ssh的测试从72个远程服务器自动化回中央服务器。我有中央服务器无密码ssh工作到72服务器,但需要它从他们工作回到中央服务器。
72台服务器有两个ssh版本之一。
OpenSSH_4.3p2,OpenSSL 0.9.8e-fips-rhel5 2008年7月1日
OR
sshg3:x86_64-unknown-linux-gnu上的SSH Tectia Client 6.1.8版本:136
产品:SSH Tectia客户端许可证类型:商业
我遇到的问题是尝试将 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
答案 0 :(得分: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)