如何自动接受SSH密钥指纹?

首次连接到Linux系统时,SSH会提示你接受计算机的指纹以成功建立连接,因为“ known_hosts”文件中没有指纹。

如何自动接受SSH密钥指纹?如何自动接受SSH密钥指纹?
指纹是系统公钥的缩写版本,为了保护自己免受中间人攻击(MITM),ssh程序使用自上次连接以来存储的指纹验证远程系统ssh的指纹。如果指纹已更改,系统将提醒你并询问是否要继续。

有时你可能需要自动接受SSH指纹。例如,如果创建了一个shell脚本用来远程管理多台linux服务器。

可以使用以下两种方法来完成此操作。

  • 使用StrictHostKeyChecking=no选项自动接受ssh指纹。
  • 使用ssk-keyscan命令接受ssh指纹。

首次连接到远程计算机时,将警告你无法建立主机的真实性,并提供密钥指纹以进行验证。
如何自动接受SSH密钥指纹?如何自动接受SSH密钥指纹?
接受指纹后,它将被保存在“known_hosts”文件中,当重新连接到同一个远程主机时,SSH根据known_hosts文件检查指纹,以验证其身份。

1、如何使用SSH选项自动接受SSH密钥指纹?

此方法简单明了,只需使用SSH命令添加选项即可实现。使用此选项时,ssh会自动将新的主机密钥添加到用户known_hosts文件中。

[root@localhost ~]# ssh -o "StrictHostKeyChecking no" localhost
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
root@localhost's password: 
Last login: Mon Jan 25 20:01:53 2021 from 192.168.43.1

如何自动接受SSH密钥指纹?如何自动接受SSH密钥指纹?
以上警告表明它已将一个密钥添加到known_host文件。
如何自动接受SSH密钥指纹?如何自动接受SSH密钥指纹?

2、如何使用ssk-keyscan命令自动接受SSH密钥指纹?

这是另一种方法,ssh-keycan允许你将ssh指纹附加到known_hosts文件中。当你想要批量添加时,此工具非常有用。使用下面命令操作:

[root@localhost ~]# ssh-keyscan -H 192.168.43.138 >> ~/.ssh/known_hosts
# 192.168.43.138:22 SSH-2.0-OpenSSH_7.4
# 192.168.43.138:22 SSH-2.0-OpenSSH_7.4
# 192.168.43.138:22 SSH-2.0-OpenSSH_7.4

使用以下命令将多台远程主机的ssh指纹添加到known_hosts。必须将远程主机的IP地址添加到一个文件中,并使用ssh-keyscan命令调用它,如下所示,将各个远程服务器的ip地址保存在文本文件里面:

[root@localhost ~]# cat remote-hosts.txt 
192.168.43.137
192.168.43.138
192.168.43.166

然后使用ssh-keyscan工具将它们的ssh指纹添加到known_hosts:

[root@localhost ~]# ssh-keyscan -f ./remote-hosts.txt >> ~/.ssh/known_hosts 
# 192.168.43.138:22 SSH-2.0-OpenSSH_7.4
# 192.168.43.137:22 SSH-2.0-OpenSSH_7.8
# 192.168.43.137:22 SSH-2.0-OpenSSH_7.8
# 192.168.43.137:22 SSH-2.0-OpenSSH_7.8
# 192.168.43.138:22 SSH-2.0-OpenSSH_7.4
# 192.168.43.138:22 SSH-2.0-OpenSSH_7.4
# 192.168.43.166:22 SSH-2.0-OpenSSH_7.4
# 192.168.43.166:22 SSH-2.0-OpenSSH_7.4
# 192.168.43.166:22 SSH-2.0-OpenSSH_7.4

如何自动接受SSH密钥指纹?如何自动接受SSH密钥指纹?

总结

首次连接到Linux系统时,SSH会提示你接受计算机的指纹以成功建立连接,因为“ known_hosts”文件中没有指纹。

本文原创地址:https://www.linuxprobe.com/auto-accept-fingerprint.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用 `paramiko` 进行 SSH 连接时,可以通过设置 `AutoAddPolicy` 来实现自动完成 SSH 指纹验证。`AutoAddPolicy` 将自动接受新的主机密钥并将其添加到 `known_hosts` 文件中。以下是一个示例: ```python import paramiko def ssh_auto_add_fingerprint(remote_host, remote_port, remote_username, remote_password): try: # 创建 SSH 客户端对象 client = paramiko.SSHClient() # 自动添加主机密钥 client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接服务器 client.connect(remote_host, port=remote_port, username=remote_username, password=remote_password) # 连接成功后的操作 # ... # 关闭连接 client.close() return True except paramiko.AuthenticationException: print(f"无法使用提供的用户名和密码登录到服务器 {remote_host}") except paramiko.SSHException as ssh_exception: print(f"SSH 连接错误: {ssh_exception}") except Exception as e: print(f"发生错误: {e}") return False # 调用函数进行自动完成 SSH 指纹验证和连接 can_connect = ssh_auto_add_fingerprint("服务器地址", 22, "用户名", "密码") if can_connect: print("SSH 连接成功") else: print("SSH 连接失败") ``` 在以上示例中,我们定义了一个 `ssh_auto_add_fingerprint` 函数,它接受远程主机地址、端口、用户名和密码作为参数。函数中使用 `paramiko` 库创建一个 SSH 客户端对象,并将 `AutoAddPolicy` 设置为自动添加主机密钥。然后通过调用 `connect` 方法来进行连接。如果连接成功,可以在连接成功后的操作中执行其他操作。在主程序中,我们调用该函数并根据返回结果打印相应的提示信息。 请确保将 "服务器地址"、端口、"用户名" 和 "密码" 替换为实际的服务器和登录凭据。如果 SSH 连接成功,将输出 "SSH 连接成功";如果连接失败,将输出 "SSH 连接失败"。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值