密钥可用于通过 ssh 登录,但 scp 拒绝权限

密钥可用于通过 ssh 登录,但 scp 拒绝权限

我对 Linux 环境还比较陌生,一直在尝试设置一个服务器用于托管目的。

我一直使用 ssh 密钥登录我的服务器,没有任何问题,但当我尝试使用 scp 时,我收到“权限被拒绝”消息。我通常关闭密码验证,但当我重新打开它时,我能够通过密码登录并通过 scp 顺利上传文件。

我还发现一件奇怪的事情,当我最初使用 scp 连接到服务器时,系统提示我服务器指纹尚未识别,我是否愿意将其添加到已知主机列表中?我发现这很奇怪的原因是因为当我第一次设置服务器并通过 ssh 登录时,我已经将服务器添加到已知主机列表中,那为什么它再次要求我进行 scp 呢?当我最初通过 ssh 执行此操作时,主机不是应该已经已知吗?我真的很困惑,并多次确保我使用的服务器路径正确,但每次我都会收到该消息,要求我将其添加到已知列表中,而我已经添加了该服务器(也可以正常登录 ssh)。当它将其添加到已知主机列表时,我可以通过密码登录,但不能使用 ssh 密钥登录。

为了解释我所做的事情,当我第一次启动服务器时,我最初使用添加了我的 ssh 密钥ssh-copy-id。一旦发生此 scp 问题,我还决定尝试使用 scp 将 ssh 密钥上传到服务器,但没有成功。我从教程中获得了此行,用于将密钥复制到服务器

scp ~/.ssh/id_rsa.pub <username>@<host>:~/.ssh/authorized_keys

我甚至尝试重做“ssh-copy-id”并使用-f 来执行此操作(这是帖子中推荐的),但没有任何效果。

我唯一能想到的可能是存在某种权限问题,但我不明白为什么使用 ssh 登录时权限与使用 scp 登录时权限会有所不同?我能想到的另一件事是,查看主机时发生了一些奇怪的事情(这可以解释为什么必须再次将服务器添加到已知主机列表中),这会影响 ssh 密钥查找?我不确定。

因此,本质上,SSH 密钥适用于 SSH 登录,但不适用于 SCP。密码适用于 SCP,但我通常会关闭密码验证并希望使用我的 SSH 密钥。

我很好奇,有谁知道发生了什么事吗?谢谢

答案1

将 ssh 和 scp 视为两个独立的程序:

在您的客户端工作站上,您是 your_username。在 ~/.ssh 中有一个文件 id_rsa.pub

在您的远程工作站上,您的用户名在 ~/.ssh 中,有一个文件 authorized_keys,其中 id_rsa.pub 的内容也是如此。

当你想要 ssh 到服务器时输入:

ssh -i ~/id_rsa.pub your_username@remote_server

-i一个以文件名作为参数的标志;它表示身份。您将在文件中找到的密钥提供给服务器,而不是密码。如果 ssh 没有提供身份,则默认提供 ~/.ssh/id_rsa.pub

当您不需要登录,但希望将文件复制到远程服务器时,您可以使用 scp 并输入:

scp -i ~/id_rsa.pub your_username@remote_server:/path/to/directory/

-i一个以文件名作为参数的标志;它表示身份。您将在文件中找到的密钥(而不是密码)提供给服务器。如果没有指定,则不会显示默认身份。

如果你输入你所给出的命令:

scp ~/.ssh/id_rsa.pub <username>@<host>:~/.ssh/authorized_keys

您说的是将文件复制~/.ssh/id_rsa.pub到远程服务器并覆盖 ~/.ssh/authorized_keys。您没有向服务器提供密钥,除非您指定一个文件-i

当您连接到远程服务器时,您必须每次输入密码或提供 ssh 密钥。

在远程服务器上,确保 authorized_keys 文件的内容与客户端计算机上的 id_rsa.pub 匹配。将其权限设置为 600

如果您可以使用密钥通过 ssh 成功登录,那么您应该能够以 your_username 的身份复制文件,前提是您具有远程目录的权限。

再次尝试运行任何 scp 命令,但-i ~/.ssh/id_rsa.pub每次都包含。

如果您确实想将 id_rsa.pub 复制到远程 authorized_keys,则要运行的命令是:

scp -i ~/.ssh/id_rsa.pub ~/.ssh/id_rsa.pub @:~/.ssh/authorized_keys

相关内容