如何避免 ssh 请求许可?

Nic*_*nay 85 ssh key-authentication

我们正在尝试为 RAC 安装加速 oracle 节点的安装。这要求我们安装和配置 ssh,以便它不会提示输入密码。

问题是:在第一次使用时,我们被提示

RSA key fingerprint is 96:a9:23:5c:cc:d1:0a:d4:70:22:93:e9:9e:1e:74:2f.
Are you sure you want to continue connecting (yes/no)? yes
Run Code Online (Sandbox Code Playgroud)

有没有办法避免这种情况,或者我们注定要在每个服务器上的每个服务器上手动连接至少一次?

Tim*_*edy 132

2019 年 12 月更新:

正如 Chris Adams 在下面指出的那样,自编写此答案以来的 6.5 年中,Openssh 发生了相当大的变化,并且有一个新选项比下面的原始建议安全得多:

* ssh(1): expand the StrictHostKeyChecking option with two new
   settings. The first "accept-new" will automatically accept
   hitherto-unseen keys but will refuse connections for changed or
   invalid hostkeys. This is a safer subset of the current behaviour
   of StrictHostKeyChecking=no. The second setting "off", is a synonym
   for the current behaviour of StrictHostKeyChecking=no: accept new
   host keys, and continue connection for hosts with incorrect
   hostkeys. A future release will change the meaning of
   StrictHostKeyChecking=no to the behaviour of "accept-new". bz#2400
Run Code Online (Sandbox Code Playgroud)

因此,不要StrictHostKeyChecking nossh_config文件中设置,而是设置StrictHostKeyChecking accept-new.


StrictHostKeyChecking no在您的/etc/ssh/ssh_config文件中设置,它将成为服务器上每个用户使用的全局选项。或者在您的~/.ssh/config文件中设置它,它将是当前用户的默认设置。或者您可以在命令行上使用它:

ssh -o StrictHostKeyChecking=no -l "$user" "$host"
Run Code Online (Sandbox Code Playgroud)

以下是对其工作原理的解释man ssh_config (或查看此更新版本):

StrictHostKeyChecking

      如果此标志设置为“是”,ssh将永远不会自动将主机密钥添加到$HOME/.ssh/known_hosts文件中,并拒绝连接到主机密钥已更改的主机。这提供了对特洛伊木马攻击的最大保护,但是,当/etc/ssh/ssh_known_hosts文件维护不善或经常连接到新主机时,这可能会很烦人。此选项强制用户手动添加所有新主机。如果此标志设置为“否”,则ssh将自动将新的主机密钥添加到用户已知的主机文件中。如果此标志设置为“询问”,则只有在用户确认这是他们真正想要做的事情后,才会将新的主机密钥添加到用户已知的主机文件中,并且 ssh将拒绝连接到主机密钥已更改的主机. 在所有情况下都会自动验证已知主机的主机密钥。论点必须是“是”、“否”或“询问”。默认为“询问”。

  • 这个答案听起来像是一个正在酝酿中的安全问题。 (6认同)
  • 这个答案是一个等待发生的安全漏洞,除非您小心地仅在已知安全的网络上启用它(即,将它放在`~/.ssh/ssh_config` 中绝不是一个好主意)。现代版本的 OpenSSH 支持“StrictHostKeyChecking accept-new”,它会自动接受来自新主机的密钥,而不会对您已经连接的每个主机禁用安全检查。 (2认同)

kur*_*rtm 29

ssh-keyscan - 收集 ssh 公钥

如果您已经知道要连接的主机列表,则可以发出:

ssh-keyscan host1 host2 host3 host4
Run Code Online (Sandbox Code Playgroud)

您可以-H选择让它散列结果,如 ssh 默认为现在

还可以给你-t keytype公钥类型dsarsa或者ecdsa如果你有一个偏好于哪个键的类型抢,而不是默认。

运行后ssh-keyscan,它将预先填充您的已知主机文件,并且您不会有 ssh 询问您添加新密钥的权限。

  • 与 https://www.techrepublic.com/article/how-to-easily-add-an-ssh-fingerprint-to-your-knownhosts-file-in-linux/ 确认。`ssh-keyscan -H myhost >> ~/.ssh/known_hosts`,或者对于服务器范围,`/etc/ssh/ssh_known_hosts` (6认同)

xeb*_*che 14

忽略主机

忽略 HostKeyChecking。为此,我使用例如:

ssh -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null user@example.net
Run Code Online (Sandbox Code Playgroud)

添加主机

.ssh/known_hosts在第一次连接之前添加主机/服务器的指纹。这是更安全的方式。


Dav*_*her 12

您可以将指纹添加到每个服务器的 known_hosts。对于单个用户:

cat ~/.ssh/known_hosts
echo "$SERVER,$PORT ssh-rsa $SERVER_KEY_FINGERPRINT" >> ~/.ssh/known_hosts
Run Code Online (Sandbox Code Playgroud)

  • 自从引入哈希以来,这不再是正确的方法。 (3认同)

小智 5

在尝试之前执行以下代码片段。

mkdir -p ~/.ssh     
echo "Host *" > ~/.ssh/config     
echo " StrictHostKeyChecking no" >> ~/.ssh/config
Run Code Online (Sandbox Code Playgroud)

ps:严格不适用于生产服务器,请小心 ManInMiddle