无需密码的 SSH 只能工作一次

无需密码的 SSH 只能工作一次

我想配置 SSH 以便无需输入密码即可使用它。我在 Windows 10 上使用 Ubuntu 18.04 LTS。我需要它来运行 Hadoop 3.1.1 (https://hadoop.apache.org/docs/r3.1.1/hadoop-project-dist/hadoop-common/SingleCluster.html#Standalone_Operation) 使用伪分布式模式。

我尝试了很多不同的解决方案,但都没有任何结果。我发现第一次使用命令 ssh localhost 时我不需要输入密码,但当我再次输入时我必须输入密码。

我解释一下我所采用的不同步骤:

  1. 我已经使用 ssh-keygen -t rsa 创建了一个密钥
  2. 我将公钥添加到authorized_keys文件中:cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  3. 我添加了密钥执行:exec ssh-agent bash 和 ssh-add id_rsa (几年前,在这一点上有时我遇到不同的问题,我使用了不同的解决方案:https://superuser.com/questions/1147145/what-are-the-differences-between-the-those-ways-of-using-the-ssh-agent
  4. 我执行:ssh localhost

此时一切正常,但是,当我再次执行 ssh localhost 时,我必须输入密码。这些步骤在 3 年前的 AWS Ubuntu 上运行良好。

我在第 3 点尝试了另一种方法:https://www.ssh.com/ssh/copy-id

我发现的所有可能的解决方案都与我在第 3 点中尝试过的解决方案相同,或者我认为如此。我尝试更改 authorized_keys 和 .ssh 的权限,就像我在其他解决方案中发现的那样,但没有成功。

答案1

你应该看看这个答案它描述了ssh您的用户的配置(编辑~/.ssh/config)和其他详细信息。

步骤如下:

  1. 生成您的ssh密钥。
  2. 将主机添加到您的~/.ssh/config文件中。
  3. 添加您的民众.pub)键到远程用户的~/.ssh/authorized_keys
    • 使用命令最容易完成此操作ssh-copy-id
    • ssh非常特别是关于权限~/.ssh/和在其中找到的文件。 ssh-copy-id为您处理一切。
  4. 尝试连接到主机:
    • ssh host
    • ssh host -vvv # Verbose output for troubleshooting

您是否尝试使用,ssh-agent因为您的密钥受密码保护?我建议您手动连接,然后ssh-agent让它正常工作。密钥正常工作后,您可以着手解决任何ssh-agent特定问题。

要进行故障排除,请务必使用ssh详细模式,并监视 ( tail -f) 远程服务器的/var/log/auth.log文件。在较新的系统上,您可能必须使用journalctl( journalctl -u sshd | tail -f)。


一旦你已经让密钥正常工作,你就可以查看ssh-agent文档,例如这套安装说明。通常步骤如下:

  1. 生成您的密钥(就像您已经做的那样)。
  2. 安装密钥(就像您已经做的那样)。
  3. 开始ssh-agent
    • eval ssh-agent
    • 仅一次,而不是每个连接或任何东西。
    • 您可以让此操作自动发生,具体取决于何时以及针对哪个用户。
  4. 将您的密钥添加到ssh-agent
    • ssh-add ~/.ssh/private_key

请务必查看其他ssh-agent配置选项,例如密钥保持解锁的时间长度。


归结起来,你的问题很可能是以下之一:

  1. 您说您添加了ssh-agent开始,并添加了您的id_rsa密钥(过去),但是现在您已经生成了一个新密钥,该密钥也需要被ssh-add“d”。
    • ssh-agent如果添加密钥后遇到问题,请检查该系统是否确实在运行。
    • ps aux | ssh-agent
  2. 您正在将密钥添加到本地文件,而不是远程用户的文件。
    • 想象一下您正在添加密码,因此您需要在应该接受该密码的系统上添加该密码。
    • 你的远程主机是本地主机,但前提是您将来希望能够在远程主机上工作。但是,它仍然需要位于$HOME正确用户的正确目录中。
  3. 您说它只起作用一次?如果您在较短的时间内尝试两次,比如一分钟,它会起作用两次吗?我想知道您是否ssh-agent只是设置为在比您测试的更短的时间内锁定您的钥匙。
  4. 当附加到~/.ssh/authorized_keys文件(>>)时,您最初创建了该文件,并且这将具有不正确的权限。
    • 在没有确保访问权限和备份任何远程文件的情况下,请勿执行以下操作。
    • 如果你的“远程主机”是本地主机,那么很可能有您想要保留的文件,例如您的密钥,并且应该在删除之前备份。
    • 删除整个远程~/.ssh/目录并使用ssh-copy-id在远程主机上正确地键入您的用户。
    • 这将显示在远程主机上auth.log并指定文件权限不正确。
    • ssh-copy-id如果在使用创建目录和文件后仍然遇到问题,请发布~/.ssh生成的密钥文件的权限。
  5. ssh进入远程主机后,ssh-agent除非您已配置ssh-agent,并ssh通过~/.ssh/config,否则您将失去ForwardAgent yes。如果您希望转发ssh-agent,则必须将其配置为允许这样做,并了解该决定的安全隐患。还应注意 可能ForwardAgent设计为在不同的机器上运行,并且由于已运行的复杂性,可能无法在本地使转发工作ssh-agent

相关内容