AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 20865
Accepted
theTuxRacer
theTuxRacer
Asked: 2011-01-10 21:56:22 +0800 CST2011-01-10 21:56:22 +0800 CST 2011-01-10 21:56:22 +0800 CST

是否可以从 SSH 的 known_hosts 文件中删除特定的主机密钥?

  • 772

是否可以从 SSH 的 known_hosts 文件中删除特定的主机密钥?

我通常最终会删除整个known_hosts文件,我这样做没有问题,但出于好奇,是否可以只删除一个条目?

我打开了known_hosts文件,但我很难理解它的内容。

以下是我面临的信息,这导致我提出了这个问题:

Add correct host key in /home/wissen16/.ssh/known_hosts to get rid of this message.
Offending key in /home/wissen16/.ssh/known_hosts:1
RSA host key for foo.com has changed and you have requested strict checking.
Host key verification failed.
ssh
  • 11 11 个回答
  • 629825 Views

11 个回答

  • Voted
  1. Best Answer
    Takkat
    2011-01-10T23:43:57+08:002011-01-10T23:43:57+08:00

    使用此命令从 known_hosts 中删除条目:

    ssh-keygen -R hostname
    
    • 627
  2. Mike Scott
    2011-01-10T22:00:52+08:002011-01-10T22:00:52+08:00

    是的,您只能移除一把钥匙。只需在编辑器中打开它并删除有问题的行。错误消息中冒号后面的数字是行号,所以这是要删除的行——在你的例子中是第 1 行。

    • 35
  3. Buddy Lindsey
    2011-01-10T22:01:14+08:002011-01-10T22:01:14+08:00

    我最近才开始使用主机密钥,但是当我弄乱它们时,通常每行一个密钥,所以备份文件并一次删除一个,直到找到正确的。然后把其他的加回来。要做到这一点还有很长的路要走,但应该可以。

    同样基于该错误,并且不知道是什么,它可能是文件中的第一个主机密钥是问题,所以用 vim 打开文件

    vim ~/.ssh/known_hosts

    并击中

    dd

    然后保存它。

    • 18
  4. dragon788
    2015-03-25T14:24:03+08:002015-03-25T14:24:03+08:00

    使用 ssh-keygen -R 主机名并不总是有效。如果您有更新版本的 SSH 来“隐藏”主机名以防止 ssh-agent 劫持,显然 ssh-keygen 无法取消对主机名的哈希处理。

    例如,我有一个名为 build-node-01 的主机,我已连接到它并接受了密钥。然后我从头开始重建它,获得一个新的主机指纹并尝试重新连接,我会收到一条警告,提示 X 行存在冲突(比如 3)。我跑ssh-keygen -R hostname了,但下次我尝试连接时,我仍然收到警告说存在冲突。我检查了文件只是发现主机名被散列并显示为[1] Bu4Ch@R@4D0M57uFF而不是可读的主机名。

    在这种情况下,成功移除违规主机的唯一方法是使用

    sed -i 'xd' ~/.ssh/known_hosts
    

    为了使 sed 更进一步,您可能希望备份 known_hosts 以防删除错误的行,在这种情况下,只需将 .bak (或任何扩展名)添加到 -i 选项以使用该选项创建备份扩大。使用 ssh-keygen 会自动执行此操作。

    sed -i.bak 'xd' ~/.ssh/known_hosts
    
    • 3
  5. Mark G B
    2014-02-20T16:37:25+08:002014-02-20T16:37:25+08:00

    只是为了分享我刚刚找到的另一个干净简单的答案。删除主机名对我来说是不可能的,因为 known_hosts 文件是散列的。但是,我可以根据错误消息中的行号手动编辑主机条目。正如 Mike Scott 之前所指出的,有问题的主机名行号在错误消息中。

    或者,我可以做到这一点。从这里开始:如何修复 ssh known_hosts 文件中的违规密钥

    我有一点 cli 魔法

    sed -i 'xd' ~/.ssh/known_hosts
    

    将 x 替换为行号,瞧。如果 sed 不起作用,他还提供了 perl 答案。

    • 1
  6. Anish Sapkota
    2020-05-02T20:06:54+08:002020-05-02T20:06:54+08:00

    如果您想删除某些 IP 的主机密钥,那么这将有所帮助:

    ssh-keygen -f "~/.ssh/known_hosts" -R "49.12.89.136"

    • 1
  7. mickwombat
    2021-03-04T22:28:21+08:002021-03-04T22:28:21+08:00

    要删除有问题的条目是这样的

    sed -i '/<ipaddr|hostname>/d' ~/.ssh/known_hosts
    

    我拼凑了下面的scipt。只需将其保存为 ~/.rmhost

    #!/bin/bash
    
    rmhost_help()
    {
            echo "Usage rmhost {ipaddr|hostname}"
            echo "          -h      Print this help message"
            exit 0
    }
    if [ -z $1 ] || [ $1 == "-h" ]; then rmhost_help
    
    fi
    
    sed -i "/$1/d" ~/.ssh/known_hosts
    
    echo "host $1 removed"
    exit 0
    

    然后把这个别名放在 ~/.bashrc

    别名 rmhost=~/.rmhost

    当您收到错误时,只需输入“rmhost {ipaddr|hostname}”

    • 1
  8. Mobarak Hosen Shakil
    2021-07-24T13:47:40+08:002021-07-24T13:47:40+08:00

    这个对我有用。这是尝试添加已知主机时显示的默认方法。

    ssh-keygen -f "/home/noob/.ssh/known_hosts" -R "172.16.132.132"
    

    只需在此处更改 IP 地址和主机文件路径。

    • 1
  9. Shan Valleru
    2014-02-20T17:32:00+08:002014-02-20T17:32:00+08:00
    sed '/10\.20\.120\.211/d' ~/.ssh/known_hosts > temp && mv temp ~/.ssh/known_hosts
    

    在这种情况下,10.20.120.211 是我要从我的 known_hosts 文件中删除的主机,请确保您转义了特殊字符,例如 (.)

    • 0
  10. Pablo Bianchi
    2019-01-31T18:42:12+08:002019-01-31T18:42:12+08:00

    您可以通过更新来避免删除特定主机:

    ssh-keyscan -t ecdsa hostname >> ~/.ssh/known_hosts
    

    这样您就不必再次连接到主机。

    • 0

相关问题

  • Gnome-terminal 快捷方式在选项卡中打开多个 ssh 连接

  • 通过 SSH 禁用密码访问?

  • ssh 如何使用多个私钥?

  • 如何通过一个 SSH 连接拥有多个终端会话?

  • 如何与无头服务器进行图形交互?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    我需要什么命令来解压缩/提取 .tar.gz 文件?

    • 8 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Marko Smith

    如何使用命令行将用户添加为新的 sudoer?

    • 7 个回答
  • Marko Smith

    更改文件夹权限和所有权

    • 9 个回答
  • Martin Hope
    EmmyS 我需要什么命令来解压缩/提取 .tar.gz 文件? 2011-02-09 14:50:41 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve