我有 47 台 Linux 客户端机器和一台 Solaris 服务器机器(所有 Linux 客户端机器都是 red-hat 5.1)
所有客户端都执行与服务器的 ssh 连接,以验证服务器中是否存在 /tmp/generic_error.txt
客户端在中午 12:00 执行 ssh
我看到一些奇怪的东西
尽管 /tmp/generic_error.txt 文件存在,但有些客户端无法识别它
所以我的第一个结论是我无法从 47 台机器向一台服务器执行多次 ssh?
但我不确定我说得是否正确?
请告知从 47 个 Linux 客户端同时向一台服务器执行 ssh 的最佳流程是什么?
备注 - 我无法触摸和配置“基于 ssh 密钥的身份验证”,因为 Lenox 的机器必须有密码(这是我们安全策略的一部分)
- Linux 客户端中的 Expect 脚本示例 - 此 Expect 验证服务器中是否存在 /tmp/generic_error.txt(此操作应于中午 12:00 在所有 47 个 Linux 客户端上准确执行)
10.10.18.61-服务器
expect=`cat << EOF
set timeout -1
spawn ssh 10.10.18.61
expect {
")?" { send "yes\r" ; exp_continue }
word: {send freenelsonmandela\r}
}
expect > {send "ls /tmp/generic_error.txt\r"}
expect > {send exit\r}
expect eof
EOF`
exe 期望:
expect -c "$expect" | grep "generic_error.txt" | grep -v ls
答案1
如果我理解正确的话,您有 47 个客户端需要知道服务器主机上是否存在某个文件。并且这需要同时运行。
让我们从最小的组件开始,即文件测试。你可以扩展它
这应该适用于大多数 shell
ls /tmp/file 2>&1 >/dev/null && echo Found || echo Not Found
或 BASH
[ -f /tmp/file ] && echo Found || echo Not Found
您可能需要进一步检查您正在使用的 shell,可能是 ksh,并仔细检查其内置函数以查看文件是否存在。
现在稍微向外看,在您的期望结束时,您没有对结果做任何事情。这可能是导致大多数问题的原因。您可以访问$expect_out(buffer)
其中包含最后几场比赛之间的内容。
通常用作:
puts "$expect_out(buffer)"