【问题标题】:How do I verify/check/test/validate my SSH passphrase?如何验证/检查/测试/验证我的 SSH 密码?
【发布时间】:2011-05-23 15:00:39
【问题描述】:

我想我忘记了我的 SSH 密钥的密码,但我有预感它可能是什么。如何检查我是否正确?

【问题讨论】:

    标签: ssh ssh-keys openssh


    【解决方案1】:

    ssh-keygen -y

    ssh-keygen -y 会提示您输入密码(如果有的话)。

        如果您输入正确密码,它将显示相关的公钥。
    如果您输入了错误密码,它将显示load failed
    如果密钥有 no 密码,它将提示您输入密码,并立即显示相关的公钥。

    例如,

    创建一个新的公钥/私钥对,带或不带密码:

    $ ssh-keygen -f /tmp/my_key
    ...
    

    现在看看你是否可以访问密钥对:

    $ ssh-keygen -y -f /tmp/my_key
    

    以下是一个扩展示例,显示输出。

    创建一个新的公钥/私钥对,带或不带密码:

    $ ssh-keygen -f /tmp/my_key
    Generating public/private rsa key pair.
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in /tmp/my_key.
    Your public key has been saved in /tmp/my_key.pub.
    The key fingerprint is:
    de:24:1b:64:06:43:ca:76:ba:81:e5:f2:59:3b:81:fe rob@Robs-MacBook-Pro.local
    The key's randomart image is:
    +--[ RSA 2048]----+
    |     .+          |
    |   . . o         |
    |    = . +        |
    |   = + +         |
    |  o = o S .      |
    |   + = + *       |
    |    = o o .      |
    |     . .         |
    |      E          |
    +-----------------+
    

    尝试通过输入正确的密码来访问密钥对。 请注意,将显示公钥,退出状态($?)将为0,表示成功:

    $ ssh-keygen -y -f /tmp/my_key
    Enter passphrase:
    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBJhVYDYxXOvcQw0iJTPY64anbwSyzI58hht6xCGJ2gzGUJDIsr1NDQsclka6s0J9TNhUEBBzKvh9nTAYibXwwhIqBwJ6UwWIfA3HY13WS161CUpuKv2A/PrfK0wLFBDBlwP6WjwJNfi4NwxA21GUS/Vcm/SuMwaFid9bM2Ap4wZIahx2fxyJhmHugGUFF9qYI4yRJchaVj7TxEmquCXgVf4RVWnOSs9/MTH8YvH+wHP4WmUzsDI+uaF1SpCyQ1DpazzPWAQPgZv9R8ihOrItLXC1W6TPJkt1CLr/YFpz6vapdola8cRw6g/jTYms00Yxf2hn0/o8ORpQ9qBpcAjJN
    $ echo $?
    0
    

    尝试通过输入错误的密码来访问密钥对。 请注意,将显示“加载失败”错误消息(消息可能因操作系统而异),退出状态 ($?) 将为 1 以指示错误:

    $ ssh-keygen -y -f /tmp/my_key
    Enter passphrase:
    load failed
    $ echo $?
    1
    

    尝试访问没有密码的密钥对。注意没有提示输入密码,会显示公钥,退出状态($?)会是0表示成功:

    $ ssh-keygen -y -f /tmp/my_key_with_no_passphrase
    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDLinxx9T4HE6Brw2CvFacvFrYcOSoQUmwL4Cld4enpg8vEiN8DB2ygrhFtKVo0qMAiGWyqz9gXweXhdmAIsVXqhOJIQvD8FqddA/SMgqM++2M7GxgH68N+0V+ih7EUqf8Hb2PIeubhkQJQGzB3FjYkvRLZqE/oC1Q5nL4B1L1zDQYPSnQKneaRNG/NGIaoVwsy6gcCZeqKHywsXBOHLF4F5nf/JKqfS6ojStvzajf0eyQcUMDVhdxTN/hIfEN/HdYbOxHtwDoerv+9f6h2OUxZny1vRNivZxTa+9Qzcet4tkZWibgLmqRyFeTcWh+nOJn7K3puFB2kKoJ10q31Tq19
    $ echo $?
    0
    

    请注意,参数的顺序很重要。 -y必须-f input_keyfile之前,否则你会得到错误Too many arguments.

    【讨论】:

    • 如果没有密码,它只会打印出相关的公钥。
    • 谢谢@Kyrremann!我现在更新了答案以反映这一点。
    • ssh-keygen -y 要求提供密钥文件,并在单击返回时提供默认值。
    • 我使用ssh-keygen -y 来检查我的 ssh 密钥的密码。它工作得很好,除了我的 Ubuntu 变得难以置信的慢。大多数程序可以在一分钟或更长时间内启动,而 CPU 使用率为 100%。重新启动笔记本电脑后,我几乎无法登录,因为需要几分钟才能看到我的桌面。最后我找到了this issue on Ask Ubuntu。我必须从 gnome-keyring-daemon 开始解决问题。
    • 注意参数的顺序很重要ssh-keygen -f -y /to/my-key不起作用:Too many arguments.
    【解决方案2】:

    您可以通过尝试将其加载到您的 SSH 代理来验证您的 SSH 密钥密码。对于OpenSSH,这是通过ssh-add 完成的。

    完成后,请记住通过运行 ssh-add -d 从终端卸载 SSH 密码。

    【讨论】:

    • 我认为 ssh-add 需要机器上的管理员权限。我收到一条错误消息:“无法打开与您的身份验证代理的连接。”
    • @IgorGanapolsky:不,它需要一个正在运行的身份验证代理。修改您的启动脚本或选项以启动一个。
    • Rob's answer 是正确答案。
    • 如果您碰巧在使用 selinux,您可能还想检查主目录和 .ssh 文件的上下文!我很幸运能够使用这个简单的修复:# restorecon -R -v /home/user 要检查这是否是问题(尽管前面的命令不应该引起任何问题),您可以使用$ ls -lZR <home_dir> 检查上下文。如果您在主目录上看不到user_home_t,在.ssh 目录和authorized_keys 文件上看不到ssh_home_t,请使用restorecon 修复它们。
    • 抢答案是正确答案;此命令只会导致错误消息“无法打开与您的身份验证代理的连接”。所以除非你有这个海报的确切设置,否则它是没有答案的;它只是“在我的机器上工作”的一个版本
    【解决方案3】:

    将@RobBednark 的解决方案扩展到特定的Windows + PuTTY 场景,您可以这样做:

    1. 使用 PuTTYgen 生成 SSH 密钥对(在 Manually generating your SSH key in Windows 之后),将其保存到 PPK 文件中;

    2. 使用 Windows 资源管理器中的上下文菜单,选择使用 PuTTYgen 编辑。它会提示输入密码。

    如果你输入了错误的密码,它会再次提示。

    注意,如果您喜欢键入,请在包含 PPK 文件的文件夹中使用以下命令:puttygen private-key.ppk -y

    【讨论】:

      【解决方案4】:

      到目前为止,我在网上找到的最佳答案是:

      ssh-keygen -y -P "" -f ~/.ssh/id_rsa
      

      这将尝试使用密码作为空字符串来读取私钥。如果您的密钥带有 no 密码,这将显示一个完美的公钥。

      否则应用程序将退出并显示错误代码和消息:

      Load key "~/.ssh/id_rsa": incorrect passphrase supplied to decrypt private key
      

      【讨论】:

      • 至少是我们可以在 shell 脚本中使用的解决方案!
      【解决方案5】:

      使用“ssh-keygen -p”。可以加“-f”

      它会提示您输入旧密码。如果密码正确,会提示输入新密码。如果旧密码不正确,您将收到“Failed to load key <...>”。

      【讨论】:

        【解决方案6】:

        如果您的密码是解锁 SSH 密钥,而您没有 ssh-agent,但在您的机器上安装了 sshd(SSH 守护程序),请执行以下操作:

        cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys;
        ssh localhost -i ~/.ssh/id_rsa
        

        其中~/.ssh/id_rsa.pub 是公钥,~/.ssh/id_rsa 是私钥。

        【讨论】:

        • 这样做不需要密码短语
        • 它对我有用,将私有 id_rsa 解锁到 ssh localhost
        • 我收到一个错误:“ssh:连接到主机 localhost 端口 22:错误文件号”
        • "ssh: connect to host localhost post 22: Bad file number" sshd 在你的本地机器上运行吗?您是否有阻止访问的软件防火墙?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-03-21
        • 2013-05-05
        • 2012-06-29
        • 2022-01-19
        • 1970-01-01
        • 2019-02-21
        • 2014-01-20
        相关资源
        最近更新 更多