我目前运行具有以下命令的服务器测试:发送关闭信号SSH立即密码提示
echo ^C |ssh -q [email protected]${server}
if [ 0 -ne $? ]; then
echo "==> Failed to connect..."; continue
fi
遗憾的是它并不像我^C
是这是一个密码提示后立即关闭连接我期待什么。有没有更好的方式来写这个测试ssh连接而不挂在提示符上?
我目前运行具有以下命令的服务器测试:发送关闭信号SSH立即密码提示
echo ^C |ssh -q [email protected]${server}
if [ 0 -ne $? ]; then
echo "==> Failed to connect..."; continue
fi
遗憾的是它并不像我^C
是这是一个密码提示后立即关闭连接我期待什么。有没有更好的方式来写这个测试ssh连接而不挂在提示符上?
在unix系统上,^C
杀死一个进程,因为当用户键入^ C时,TTY接口向进程发送中断信号。标准输入上的文字^ C(从文件读取或从另一个进程的输出打印到管道中)只是一个常规字符。
您可以通过类似这样运行的ssh抑制密码认证:
ssh -o PasswordAuthentication=no -q [email protected]${server}
ssh将有故障代码退出如果不能使用密码以外的东西来验证。此失败代码与连接失败无法区分,因此这可能不是您想要的。
如果您主要对连接到远程SSH服务器端口感兴趣,则不必使用实际的ssh程序进行测试。例如,你可以做这个测试与nc
(netcat):
$ nc -z localhost 22
$ echo $?
0
$ nc -z localhost 11122
$ echo $?
1
的-z
标志告诉netcat来测试连接到指定的主机和端口不发送或接收任何数据。你可以像这样构造你的测试:
if nc -z localhost 22
then
: success
else
echo Connection to ${server} failed
fi
'0!= = $(echo $?)'???如果不会产生错误信息,我会感到惊讶。无论如何,你可以将它减少到'if [$? -ne 0];然后'。并且很遗憾地说,我认为你原来的论文不会工作。它很复杂,所以如果你不能很快地推进你的代码,那么开始阅读'expect'来支持你的测试。祝你好运。 – shellter
@Academia echo $'cc'| ssh root @ hostname似乎没有工作=/ – ehime
@shellter是的,我认识的错误编码;)改变,以反映你所说的 – ehime