如何禁用 SSH 严格主机密钥检查 (Strict Host Key Checking) ?

当你通过 SSH 连接到远程主机时,SSH 客户端检查 ~/.ssh/known_hosts 文件下的主机密钥文件。如果找到 key ,您将在身份验证后连接到远程服务器。如果没有找到 key,该命令将显示一个警告消息,并提示接受或拒绝连接请求。输入“yes”接受后,就会添加 key 到 ~/.ssh/known_hosts 文件。
下面是一个首次连接例子:
ssh ubuntu@remote-host
你将会看到如下提示:
The authenticity of host 'remote-host (123.45.67.89)' can't be established.
RSA key fingerprint is 9f:48:89:f5:68:2f:cd:b3:19:95:40:43:98:09:0a:1a.
Are you sure you want to continue connecting (yes/no)?
但是在某些情况下,比如 shell 脚本,我们需要禁用严格的主机检查。
Disable Strict Host Key Checking
我们将介绍3中禁用严格的主机检查的方法,希望对你有用。
(1) Disable with SSH Command
您可以在 ssh 命令中定义 StrictHostKeyChecking=no 参数以跳过主机密钥检查。
ssh -o StrictHostKeyChecking=no user@remote-host
(2) Temporary Environment Variable
对于临时会话,可以使用环境变量来禁用主机密钥检查。
export SSH_OPTIONS="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
ssh $SSH_OPTIONS user@hostname
(3) Disable Using Config File
还可以在配置文件中定义禁用主机密钥检查,首先创建一个 ~/.ssh/config 文件。
vi ~/.ssh/config
添加以下内容:
Host *
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
Host * 这将禁用所有主机检查,也可以指定一个特定的主机。
Host 192.168.1.10
StrictHostKeyChecking no
另外,对该文件设置适当的权限,使其对用户为只读。
sudo chmod 600 ~/.ssh/config
Security Warning
禁用严格的主机密钥检查会绕过 SSH 对远程主机真实性的验证。这可能会使您暴露于中间人攻击,攻击者可以冒充您正在连接的服务器。
如果必须禁用它,请将其限制在可信网络和临时任务中使用。更安全的方法是,手动将服务器的主机密钥添加到 ~/.ssh/known_hosts 文件。
ssh-keyscan -H hostname >> ~/.ssh/known_hosts
我的开源项目
评论已关闭
