【问题标题】:Make script Error on "Authenticity of host cannot be established" message“无法建立主机的真实性”消息上的脚本错误
【发布时间】:2023-04-01 10:00:03
【问题描述】:

我正在编写一个包装脚本,它将无密码 ssh 设置到其他服务器以供其他脚本使用。

问题是内部脚本无法接受用户输入。例如,每当它收到

无法建立主机'hostname.server (XXX.XXX.XX.XX)'的真实性。

RSA 密钥指纹为 RS:A-:FI:NG:ER:PR:IN:T-。

您确定要继续连接(是/否)?

并且用户输入任何内容(否、是或什么都没有,然后按回车键),内部脚本会失败,因为它们不期望输入。 我无法控制内部脚本,也无法编辑它们。

我的包装脚本主要设置 ssh,并在其他脚本运行之前将 ssh 测试到服务器中。

我希望包装器脚本在需要用户输入的任何 ssh 响应(如上面提到的)以及任何类型的 ssh 错误上出错,因此在包装器脚本中尽早发现故障而不是稍后内部脚本。

有什么好的方法可以做到这一点?

【问题讨论】:

  • ssh -o BatchMode=yes开头怎么样?
  • 这基本上就是我想要的。提供这个作为答案,我会接受。

标签: bash shell ssh


【解决方案1】:

您要查找的 SSH 选项是 BatchMode

来自手册页:

 BatchMode
         If set to ``yes'', passphrase/password querying will be disabled.
         This option is useful in scripts and other batch jobs where no
         user is present to supply the password.  The argument must be
         ``yes'' or ``no''.  The default is ``no''.

为您的连接设置超时也可能很有价值,这样网络问题就不会导致您的 ssh 客户端永远挂起:

 ConnectTimeout
         Specifies the timeout (in seconds) used when connecting to the
         SSH server, instead of using the default system TCP timeout.
         This value is used only when the target is down or really
         unreachable, not when it refuses the connection.

ConnectTimeout 的默认值可能是 0,这会导致 ssh 永远等待。

你可以把它放在命令行上:

ssh -o BatchMode=yes -o ConnectTimeout=15 me@host.example.com

或者在像~/.ssh/config这样的配置文件中:

host example host.example.com
    hostname host.example.com
    user me
    BatchMode yes
    ConnectTimeout 15

请注意,在连接失败时,SSH 将在其退出值中返回一个状态,因此您可以使用以下 shell 构造:

if ! ssh example bin/do_something; then
  echo "ERROR: bailing out of $0." >&2
  exit 1
fi

ssh 命令也会产生标准错误,解释失败的原因。

【讨论】:

    【解决方案2】:

    在调用 ssh 之前将主机指纹添加到 known_hosts 文件中

    ssh-keyscan -H your_hostname >> ~/.ssh/known_hosts
    

    在将指纹添加到 known_hosts 之前,请确保您信任服务器,以避免安全问题。

    【讨论】:

    • 我已经这样做了,但仍然得到“无法建立真实性”。消息。问题是我正在处理具有重复 IP 地址的主机名(我们正在制造机器,并且可以有无限的主机名但不是无限的 IP,我们必须回收 IP)。因为 StrictHostKey 检查设置为“询问”而不是“否”,所以我仍然得到“无法建立真实性”。消息,因为已知主机由主机名和 IP 地址组成。
    • 应该没问题,只要主机名/IP 对没有改变。当您将不同的 IP 分配给已经存在的主机名时,就会出现此问题。
    猜你喜欢
    • 2016-08-09
    • 2011-04-09
    • 2018-05-22
    • 2020-06-03
    • 1970-01-01
    • 2022-08-12
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多