当您第一次通过 SSH 连接到远程服务器时,SSH 客户端会检查服务器的主机密钥是否已经在本地.ssh/known_hosts
文件中。如果没有,SSH 客户端会显示一个警告,询问您是否信任这个新主机,并将该主机的密钥添加到known_hosts
文件。这是为了防止中间人攻击,并确保您知道是第一次连接到该服务器。警告消息通常是这样的:
Warning: Permanently added 'host' (ECDSA) to the list of known hosts.
如果你希望禁用这个警告,可以通过修改 SSH 客户端的配置来实现:
临时禁用警告
可以在 SSH 命令中添加-o StrictHostKeyChecking=no
选项来临时禁用这个警告。
ssh -o StrictHostKeyChecking=no user@host
此命令将不会显示警告,也不会在known_hosts
文件中记录主机密钥。这种做法并不安全,因为它禁用了主机密钥验证,应该只在你确信网络和服务器安全、且仅作一次性用途时使用。
永久禁用警告
为了永久地更改这个行为,你可以在全局 SSH 配置文件(/etc/ssh/ssh_config
)或用户的个人 SSH 配置文件(~/.ssh/config
)中添加以下的配置:
Host *
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
在此配置中:
StrictHostKeyChecking no
会让 SSH 客户端在首次连接到新主机时不显示任何警告。UserKnownHostsFile /dev/null
会将known_hosts
文件重定向到一个空设备文件,这样 SSH 客户端就不会尝试读取它或将新密钥写入到它。
请注意,对known_hosts
的忽视会使得你的连接容易受到潜在的中间人攻击,因为 SSH 客户端不验证远程主机的身份,只有在知道你所连接的服务器是安全的情况下才应该使用这个选项。
为了更安全地处理这个警告,你可以手工管理known_hosts
文件,或者使用自动化工具,如ssh-keyscan
,在事先知道远程主机是安全的情况下将其主机密钥收集并安全地添加到known_hosts
中。