我目前正在使用以下命令运行服务器测试:
echo ^C |ssh -q root@${server}
if [ 0 -ne $? ]; then
echo "==> Failed to connect..."; continue
fi
不幸的是,看起来我的^C
在密码提示后立即关闭了连接,这正是我所期待的。有没有更好的方法来编写它来测试ssh连接而不挂在提示符上?
答案 0 :(得分:3)
在unix系统上,^C
会终止进程,因为当用户键入^ C时,TTY接口会向进程发送中断信号。标准输入上的文字^ C(从文件读取或从另一个进程的输出打印到管道)只是一个常规字符。
您可以通过运行ssh来禁止密码验证:
ssh -o PasswordAuthentication=no -q root@${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