我想配置 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 时我不需要输入密码,但当我再次输入时我必须输入密码。
我解释一下我所采用的不同步骤:
- 我已经使用 ssh-keygen -t rsa 创建了一个密钥
- 我将公钥添加到authorized_keys文件中:cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
- 我添加了密钥执行: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)
- 我执行:ssh localhost
此时一切正常,但是,当我再次执行 ssh localhost 时,我必须输入密码。这些步骤在 3 年前的 AWS Ubuntu 上运行良好。
我在第 3 点尝试了另一种方法:https://www.ssh.com/ssh/copy-id
我发现的所有可能的解决方案都与我在第 3 点中尝试过的解决方案相同,或者我认为如此。我尝试更改 authorized_keys 和 .ssh 的权限,就像我在其他解决方案中发现的那样,但没有成功。
答案1
你应该看看这个答案它描述了ssh
您的用户的配置(编辑~/.ssh/config
)和其他详细信息。
步骤如下:
- 生成您的
ssh
密钥。 - 将主机添加到您的
~/.ssh/config
文件中。 - 添加您的民众(
.pub
)键到远程用户的~/.ssh/authorized_keys
- 使用命令最容易完成此操作
ssh-copy-id
。 ssh
是非常特别是关于权限~/.ssh/
和在其中找到的文件。ssh-copy-id
为您处理一切。
- 使用命令最容易完成此操作
- 尝试连接到主机:
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
文档,例如这套安装说明。通常步骤如下:
- 生成您的密钥(就像您已经做的那样)。
- 安装密钥(就像您已经做的那样)。
- 开始
ssh-agent
eval ssh-agent
- 仅一次,而不是每个连接或任何东西。
- 您可以让此操作自动发生,具体取决于何时以及针对哪个用户。
- 将您的密钥添加到
ssh-agent
:ssh-add ~/.ssh/private_key
请务必查看其他ssh-agent
配置选项,例如密钥保持解锁的时间长度。
归结起来,你的问题很可能是以下之一:
- 您说您添加了
ssh-agent
开始,并添加了您的id_rsa
密钥(过去),但是现在您已经生成了一个新密钥,该密钥也需要被ssh-add
“d”。ssh-agent
如果添加密钥后遇到问题,请检查该系统是否确实在运行。ps aux | ssh-agent
- 您正在将密钥添加到本地文件,而不是远程用户的文件。
- 想象一下您正在添加密码,因此您需要在应该接受该密码的系统上添加该密码。
- 你的远程主机是本地主机,但前提是您将来希望能够在远程主机上工作。但是,它仍然需要位于
$HOME
正确用户的正确目录中。
- 您说它只起作用一次?如果您在较短的时间内尝试两次,比如一分钟,它会起作用两次吗?我想知道您是否
ssh-agent
只是设置为在比您测试的更短的时间内锁定您的钥匙。 - 当附加到
~/.ssh/authorized_keys
文件(>>
)时,您最初创建了该文件,并且这将具有不正确的权限。- 在没有确保访问权限和备份任何远程文件的情况下,请勿执行以下操作。
- 如果你的“远程主机”是本地主机,那么很可能有您想要保留的文件,例如您的密钥,并且应该在删除之前备份。
- 删除整个远程
~/.ssh/
目录并使用ssh-copy-id
在远程主机上正确地键入您的用户。 - 这将显示在远程主机上
auth.log
并指定文件权限不正确。 ssh-copy-id
如果在使用创建目录和文件后仍然遇到问题,请发布~/.ssh
生成的密钥文件的权限。
ssh
进入远程主机后,ssh-agent
除非您已配置ssh-agent
,并ssh
通过~/.ssh/config
,否则您将失去ForwardAgent yes
。如果您希望转发ssh-agent
,则必须将其配置为允许这样做,并了解该决定的安全隐患。还应注意 可能ForwardAgent
设计为在不同的机器上运行,并且由于已运行的复杂性,可能无法在本地使转发工作ssh-agent
。