如何避免ssh询问权限?


57

我们正在尝试加快用于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

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

Answers:


90

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

ssh -o StrictHostKeyChecking=no -l "$user" "$host"

这是它的工作方式的解释man ssh_config (或查看此最新版本):

StrictHostKeyChecking

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


1
+1,我也是我的服务器。只是要清楚一点,问题中的消息来自连接客户端计算机上的ssh客户端,而不是服务器。
Patkos Csaba'3

3
这个答案听起来像是在制造安全问题。
SunSparc

25

ssh-keyscan -收集ssh公钥

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

ssh-keyscan host1 host2 host3 host4

您可以-H选择让它哈希结果,例如ssh defaults到现在

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

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


1
我对“将要预先填充”的注释感到有些困惑……运行此命令后不会创建或修改known_hosts。您是说可以将内容通过管道传输到文件中以进行填充?
rschwieb

4
通过techrepublic.com/article/…进行确认。 ssh-keyscan -H myhost >> ~/.ssh/known_hosts,或针对整个服务器范围,/etc/ssh/ssh_known_hosts
cole

12

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

cat ~/.ssh/known_hosts
echo "$SERVER,$PORT ssh-rsa $SERVER_KEY_FINGERPRINT" >> ~/.ssh/known_hosts

3
自从引入哈希以来,这不再是正确的方法。
Deim0s 2015年

10

忽略主机

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

ssh -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null user@example.net

添加主机

.ssh/known_hosts在首次连接之前,先添加主机/服务器的指纹。这是更安全的方法。


你好 Oracle发出ssh命令,因此我无法控制它的执行方式。
Nicolas de Fontenay 2012年

已投票。我见过的大多数答案都没有提到将开发人员清空已知主机文件的内容。这使该命令更加可用,并且不会破坏任何现有的配置。
亚历克斯

(2)当然,将指纹添加到已知主机文件中是一种理想的方法-但是该怎么做?(1)将用户已知的主机文件设置为为何有好处  /dev/nullssh -oStrictHostKeyChecking=no user@example.net一次将服务器的指纹保存到$HOME/.ssh/known_hosts文件中会不会更好,因此后续连接将继续进行而无需请求确认?
G-Man

3

尝试执行以下代码片段。

mkdir -p ~/.ssh     
echo "Host *" > ~/.ssh/config     
echo " StrictHostKeyChecking no" >> ~/.ssh/config

ps:严格不要用于生产服务器,请提防ManInMiddle


0

我喜欢蒂姆(Tim)对一种类型的问题的回答,但是,如果这是您打算定期连接的主机,那么我会在〜/ .ssh / config中创建一个条目(如果文件不存在,请创建它)。

# this example shows wildcard for IP
# you can even use more than one wildcard 10.0.*.* for example
Host 192.168.56.*
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
# you can even alias it, which is really useful when scp'ing/rsyncing foo:/path/to/remote
Host foo
    HostName foo-long-192-10-135-55.hostname.not-going-to-remember.doh
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.