在密码提示时立即向SSH发送关闭信号

时间:2014-12-18 19:21:20

标签: bash ssh

我目前正在使用以下命令运行服务器测试:

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

不幸的是,看起来我的^C在密码提示后立即关闭了连接,这正是我所期待的。有没有更好的方法来编写它来测试ssh连接而不挂在提示符上?

1 个答案:

答案 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