SSH 公钥检查是一个重要的安全机制,可以防范中间人劫持等黑客攻击。但是在特定情况下,严格的 SSH 公钥检查会破坏一些依赖 SSH 协议的自动化任务,就需要一种手段能够绕过 SSH 的公钥检查。
首先看看什么是 SSH 公钥检查
SSH 连接远程主机时,会检查主机的公钥。如果是第一次该主机,会显示该主机的公钥摘要,提示用户是否信任该主机:
The authenticity of host '192.168.0.110 (192.168.0.110)' can't be established.
RSA key fingerprint is a3:ca:ad:95:a1:45:d2:57:3a:e9:e7:75:a8:4c:1f:9f.
Are you sure you want to continue connecting (yes/no)?
当选择接受,就会将该主机的公钥追加到文件 ~/.ssh/known_hosts 中。当再次连接该主机时,就不会再提示该问题了。
如果因为某种原因(服务器系统重装,服务器间IP地址交换,DHCP,虚拟机重建,中间人劫持),该IP地址的公钥改变了,当使用 SSH 连接的时候,会报错:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
e9:0c:36:89:7f:3c:07:71:09:5a:9f:28:8c:44:e9:05.
Please contact your system administrator.
Add correct host key in /home/jiangxin/.ssh/known_hosts to get rid of this message.
Offending key in /home/jiangxin/.ssh/known_hosts:81
RSA host key for 192.168.0.110 has changed and you have requested strict checking.
Host key verification failed.
上面的警告信息说的是:
- 服务器公钥已经改变,新的公钥的摘要是:e9:0c:36:89:7f:3c:07:71:09:5a:9f:28:8c:44:e9:05.
- 该服务器原来的公钥记录在文件 ~/.ssh/known_hosts 中第 81 行。
如果确认不是中间人劫持,需要连接到该服务器,怎么办呢?最简单的就是用 vi 打开 ~/.ssh/known_hosts 文件,定位到 81 行,将该行删除。之后就可以使用 ssh 连接了。
如何让连接新主机时,不进行公钥确认?
在首次连接服务器时,会弹出公钥确认的提示。这会导致某些自动化任务,由于初次连接服务器而导致自动化任务中断。或者由于 ~/.ssh/known_hosts 文件内容清空,导致自动化任务中断。
SSH 客户端的 StrictHostKeyChecking 配置指令,可以实现当第一次连接服务器时,自动接受新的公钥。只需要修改 /etc/ssh/ssh_config 文件,包含下列语句:
Host *
StrictHostKeyChecking no
或者在 ssh 命令行中用 -o 参数
$ ssh -o StrictHostKeyChecking=no 192.168.0.110
如何防止远程主机公钥改变导致 SSH 连接失败
当确认中间人劫持攻击风险比较小的情况下,才可以使用下面的方法,禁用 SSH 远程主机的公钥检查。
SSH 客户端提供一个 UserKnownHostsFile 配置,允许指定不同的 known_hosts 文件。那么将 known_hosts 指向不同的文件,不就不会造成公钥冲突导致的中断了么?
$ ssh -o UserKnownHostsFile=/dev/null 192.168.0.110
The authenticity of host '192.168.0.110 (192.168.0.110)' can't be established.
RSA key fingerprint is e9:0c:36:89:7f:3c:07:71:09:5a:9f:28:8c:44:e9:05.
Are you sure you want to continue connecting (yes/no)?
看,提示信息由公钥改变中断警告,变成了首次连接的提示。
和之前提到的 StrictHostKeyChecking 配置配合使用,则不再有任何警告出现了:
$ ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null 192.168.0.110
Warning: Permanently added '192.168.0.110' (RSA) to the list of known hosts.
jiangxin@192.168.0.110's password:
如果设置了无口令 SSH 登录(即通过客户端公钥认证),就可以直接连接到远程主机。这是基于 SSH 协议的自动化任务常用的手段。
相关推荐
下面将详细介绍SSH远程登录Linux的基本概念、配置及使用方法。 1. SSH的基本原理 SSH通过加密通信通道,确保了数据传输的安全性。它使用公钥/私钥对进行身份验证,防止中间人攻击。当用户尝试连接到远程Linux服务器...
公钥认证是SSH的一种安全登录方式,用户可以在远程主机上存放自己的公钥,然后使用私钥进行身份验证,避免每次登录都需要输入密码。`~/.ssh/id_rsa`是私钥文件,`~/.ssh/known_hosts`则存储已知主机的公钥指纹。 4...
`ssh-copy-id`命令是SSH的一部分,用于将本地的公钥复制到远程主机的`~/.ssh/authorized_keys`文件中,从而实现免密登录。本文将详细讲解如何使用shell脚本来批量执行`ssh-copy-id`,以提高效率。 ### 需求 批量...
总之,SSH远程登录服务器软件是IT专业人士不可或缺的工具,它提供了安全、可靠的远程管理手段。掌握SSH的使用和配置,不仅可以提升工作效率,还能加强系统的安全性。无论是初学者还是经验丰富的管理员,都应熟悉并...
3. **命令执行**:用户可以通过SSH发送单个命令到远程主机,而不必打开一个完整的shell会话。 4. **隧道创建**:SSH可以创建端口转发,即把本地机器的某个端口的流量转发到远程服务器,这对于访问受限制的服务或绕...
`scp`命令则用于在本地和远程主机之间安全地复制文件,格式为`scp user@remote_host:remote_path local_path`或`scp local_path user@remote_host:remote_path`。`sftp`提供了一个类似FTP的交互式环境,用于上传和...
这可以通过`ssh-copy-id`命令实现,如`ssh-copy-id user@remote_host`,其中`user`是远程主机的用户名,`remote_host`是远程主机的IP地址或域名。 接下来,我们关注如何管理和配置SSH以增强安全性。在`~/.ssh/...
它允许用户在本地和远程主机之间安全地上传、下载文件,执行文件管理操作。Psftp也支持批处理模式,通过脚本自动化文件传输任务。 3. Puttygen:此工具用于生成SSH密钥对,包括公钥和私钥。公钥可以部署在远程...
SSH也提供了安全的文件传输协议SFTP和命令行工具SCP,用于在本地与远程主机间安全地复制文件。例如,`scp file.txt user@remote_host:/path/to/destination`。 6. 配置文件 在`~/.ssh/config`文件中,可以配置默认...
2. 文件传输:SSH内置了SFTP(Secure File Transfer Protocol)和SCP(Secure Copy Protocol),可以安全地在本地和远程主机之间传输文件。 3. 命令执行:SSH允许用户在远程主机上执行命令,无需实际登录到该主机。...
`ssh-keygen`命令用于生成公钥和私钥,公钥可以放在远程主机的`~/.ssh/authorized_keys`文件中,私钥则保留在本地。 5. **配置文件**:SSH的配置文件通常位于`~/.ssh/config`,用户可以在这里设置默认主机、端口、...
3. **公钥认证**:学习如何生成SSH密钥对,将公钥添加到远程主机的`~/.ssh/authorized_keys`文件中,实现无密码登录,以及如何管理和备份密钥。 4. **SSH连接命令**:掌握`ssh`命令的基本用法,如直接登录、通过...
接下来,你需要将本地主机A的公钥复制到远程主机B的授权列表中。可以使用`ssh-copy-id`命令完成这一操作。例如,如果你要在主机A上登录主机B,命令会是`ssh-copy-id user@B`,其中`user`是远程主机B的用户名,`B`是...
- **基本命令**:`ssh user@hostname`用于连接到远程主机,其中`user`是用户名,`hostname`是远程服务器的IP地址或域名。 - **公钥认证**:为避免每次连接都输入密码,可以设置公钥认证。在本地生成公钥对,将公钥...
生成密钥对的命令是`ssh-keygen`,然后将公钥(默认为`~/.ssh/id_rsa.pub`)添加到远程主机的`~/.ssh/authorized_keys`文件中。 5. **防火墙设置**: 如果有防火墙,确保打开SSH服务使用的端口(默认为22)。在...
3. **复制公钥到远程主机** 使用`ssh-copy-id`命令将本地公钥复制到远程服务器,例如:`ssh-copy-id user@remote_host`。之后,你可以使用私钥无密码登录远程主机。 4. **配置SSH服务器** 编辑`/etc/ssh/sshd_...
- **说明**:使用`-o`选项可以设置多种SSH配置参数,如`-o StrictHostKeyChecking=no`可禁用主机密钥检查,提高连接速度。 #### 其他实用命令: - **`tar`**:用于打包和解压文件,例如`tar -czvf archive.tar.gz...
用户在远程主机上创建一对密钥——公钥和私钥,将公钥添加到`~/.ssh/authorized_keys`文件中,私钥保留在本地。当用户尝试登录时,服务器用公钥加密一个随机数,客户端用私钥解密,证明拥有私钥,从而完成身份验证。...
使用`ssh-keygen`生成公钥和私钥,然后将公钥复制到远程服务器的`~/.ssh/authorized_keys`文件中,可以实现无密码登录。 `ssh-keygen -t rsa` `ssh-copy-id -i ~/.ssh/id_rsa.pub 用户名@主机地址` 3. **端口...