2014-12-18 42 views
1

我目前运行具有以下命令的服务器测试:发送关闭信号SSH立即密码提示

echo ^C |ssh -q [email protected]${server} 
if [ 0 -ne $? ]; then 
    echo "==> Failed to connect..."; continue 
fi 

遗憾的是它并不像我^C是这是一个密码提示后立即关闭连接我期待什么。有没有更好的方式来写这个测试ssh连接而不挂在提示符上?

+1

'0!= = $(echo $?)'???如果不会产生错误信息,我会感到惊讶。无论如何,你可以将它减少到'if [$? -ne 0];然后'。并且很遗憾地说,我认为你原来的论文不会工作。它很复杂,所以如果你不能很快地推进你的代码,那么开始阅读'expect'来支持你的测试。祝你好运。 – shellter

+0

@Academia echo $'cc'| ssh root @ hostname似乎没有工作=/ – ehime

+0

@shellter是的,我认识的错误编码;)改变,以反映你所说的 – ehime

回答

3

在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

@爱姬:我的意思是“这很复杂”。 -) 祝你们好运。 – shellter

+0

干杯,+1并被接受。非常感谢 – ehime