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

标签 bash ssh

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

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/

相关文章:

linux - Grep .html 语法

bash - 让 Windows 10 的 bash 与 console2 一起工作

bash - Docker 运行 bash --init-file

r - 你如何在 R 中使用 ssh 连接到远程服务器

linux - 在/dev 文件上设置 root-only 权限并构建二进制文件

linux - 如何在unix中分配命令的输出

ssh - rsync 到远程位置退出并显示代码 12

java - 无需注册即可连接到 RMI 对象

git - Windows git bash在启动时找不到agent.env

linux - id_rsa.pub 文件 SSH 错误 : invalid format