我目前正在使用以下命令运行服务器测试:
echo ^C |ssh -q root@${server}
if [ 0 -ne $? ]; then
echo "==> Failed to connect..."; continue
fi
不幸的是,它看起来不像我的
^C
在密码提示后立即关闭连接,这是我所期望的。有没有更好的方法来编写这个来测试 ssh 连接而不卡在提示符上?
最佳答案
在 unix 系统上,^C
杀死一个进程,因为当用户键入 ^C 时,TTY 接口(interface)会向该进程发送一个中断信号。标准输入(从文件读取或从另一个进程的输出打印到管道)上的文字 ^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
flag 告诉 netcat 测试与指定主机和端口的连接性,而不发送或接收任何数据。您可以像这样构建您的测试:if nc -z localhost 22
then
: success
else
echo Connection to ${server} failed
fi
关于bash - 在密码提示时立即向 SSH 发送关闭信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27554111/