嗨,我在我的服务器 B 上创建了一个密钥环
我将服务器 B 的公钥复制到服务器 A 的 authorized_keys 文件中
我的服务器在 Ubuntu 20.04 LTS 上
当我尝试将目录从服务器 A 传输到服务器 B 时,出现此错误:
ubuntu@server_B:~$ scp -r -p ubuntu@server_A:/home/ubuntu/www-example-com/ /home/ubuntu/www-example-com/
ubuntu@server_A: Permission denied (publickey).
为什么我有这个错误?如何纠正?
ubuntu@server_B:~$ ls -l /home
total 20
drwx------ 2 root root 16384 Nov 5 01:14 lost+found
drwxr-xr-x 11 ubuntu ubuntu 4096 Nov 5 03:57 ubuntu
ubuntu@server_B:~$ ls -a -l /home/ubuntu
total 76
drwxr-xr-x 11 ubuntu ubuntu 4096 Nov 5 03:57 .
drwxr-xr-x 4 root root 4096 Nov 5 01:04 ..
-rw------- 1 ubuntu ubuntu 4961 Nov 5 03:38 .bash_history
-rw-r--r-- 1 ubuntu ubuntu 220 Feb 25 2020 .bash_logout
-rw-r--r-- 1 ubuntu ubuntu 3771 Feb 25 2020 .bashrc
-rw-rw-r-- 1 ubuntu ubuntu 241 Nov 5 01:28 bridge_log.txt
drwx------ 3 ubuntu ubuntu 4096 Nov 5 01:24 .cache
drwxr-x--- 3 ubuntu ubuntu 4096 Nov 5 01:24 .config
drwx------ 4 ubuntu ubuntu 4096 Nov 5 01:28 .gnupg
drwxrwxr-x 3 ubuntu ubuntu 4096 Nov 5 03:57 .local
-rw------- 1 ubuntu ubuntu 409 Nov 5 03:50 .mysql_history
drwxr-xr-x 9 ubuntu ubuntu 4096 Nov 5 03:27 nginx-1.18.0
drwxrwxr-x 7 ubuntu ubuntu 4096 Nov 5 03:27 ngx_brotli
drwx------ 3 ubuntu ubuntu 4096 Nov 5 01:24 .password-store
-rw-r--r-- 1 ubuntu ubuntu 807 Feb 25 2020 .profile
drwx------ 2 ubuntu ubuntu 4096 Nov 5 04:43 .ssh
-rw-r--r-- 1 ubuntu ubuntu 0 Nov 5 01:07 .sudo_as_admin_successful
-rw-rw-r-- 1 ubuntu ubuntu 204 Nov 5 03:33 .wget-hsts
drwxr-xr-x 2 ubuntu ubuntu 4096 Nov 5 04:00 www-example-com
ubuntu@server_B:~$ ls -l .ssh
total 16
-rw------- 1 ubuntu ubuntu 748 Nov 5 04:34 authorized_keys
-rw------- 1 ubuntu ubuntu 3434 Nov 5 04:32 id_rsa_dev-example-com
-rw-r--r-- 1 ubuntu ubuntu 748 Nov 5 04:32 id_rsa_dev-example-com.pub
-rw-r--r-- 1 ubuntu ubuntu 222 Nov 5 04:43 known_hosts
和
ubuntu@server_A ~ $ ls -l /home
total 20
drwx------ 2 root root 16384 Sep 7 17:10 lost+found
drwxr-xr-x 12 ubuntu ubuntu 4096 Nov 5 02:02 ubuntu
ubuntu@server_A ~ $ ls -a -l /home/ubuntu
total 148
drwxr-xr-x 12 ubuntu ubuntu 4096 Nov 5 02:02 .
drwxr-xr-x 4 root root 4096 Sep 7 17:04 ..
-rw------- 1 ubuntu ubuntu 72711 Nov 5 02:02 .bash_history
-rw-r--r-- 1 ubuntu ubuntu 220 Feb 25 2020 .bash_logout
-rw-r--r-- 1 ubuntu ubuntu 4049 Sep 7 21:13 .bashrc
-rw-rw-r-- 1 ubuntu ubuntu 258 Sep 7 17:20 bridge_log.txt
drwx------ 4 ubuntu ubuntu 4096 Sep 7 17:50 .cache
drwxr-x--- 4 ubuntu ubuntu 4096 Sep 7 17:50 .config
drwxrwxr-x 3 ubuntu ubuntu 4096 Sep 7 21:13 .drush
drwx------ 4 ubuntu ubuntu 4096 Oct 27 16:15 .gnupg
drwxrwxr-x 3 ubuntu ubuntu 4096 Sep 7 17:50 .local
-rw------- 1 ubuntu ubuntu 3417 Sep 14 04:38 .mysql_history
drwxr-xr-x 9 ubuntu ubuntu 4096 Sep 7 17:38 nginx-1.18.0
drwxrwxr-x 7 ubuntu ubuntu 4096 Sep 7 17:38 ngx_brotli
drwx------ 3 ubuntu ubuntu 4096 Sep 7 17:18 .password-store
-rw-r--r-- 1 ubuntu ubuntu 807 Feb 25 2020 .profile
-rw-rw-r-- 1 ubuntu ubuntu 66 Sep 7 21:15 .selected_editor
drwx------ 2 ubuntu ubuntu 4096 Nov 5 04:42 .ssh
-rw-r--r-- 1 ubuntu ubuntu 0 Sep 7 17:07 .sudo_as_admin_successful
-rw-rw-r-- 1 ubuntu ubuntu 244 Nov 5 03:45 .wget-hsts
drwxr-xr-x 6 ubuntu ubuntu 4096 Nov 4 01:03 www-example-com
ubuntu@server_A ~ $ ls -l .ssh
total 4
-rw------- 1 ubuntu ubuntu 1496 Nov 5 04:33 authorized_keys
服务器 B(副本)
$ cat /home/ubuntu/.ssh/id_rsa_dev-example-com.pub
服务器 A(过去)
$ nano /home/ubuntu/.ssh/authorized_keys
$ sudo systemctl restart ssh
加密密钥是一组用于建立安全连接的访问凭证。远程 SSH 守护程序不接受提供的密钥对您使用的帐户名有效,并拒绝您的登录。确保 authorized_keys 文件包含匹配的公钥。检查您的公钥是否已添加到服务器。
需要 SSH 客户端密钥对指纹检查 ssh -i ~/.ssh/test-key.pem ubuntu@server_IP
同样通过以下步骤,您可以重新检查 SSH 密钥
根本原因:
关于基于密钥的身份验证的许多最常见问题是由不正确的文件权限或所有权引起的。以下是您可以采取的一些步骤来解决此问题:
- 确保authorized_keys 文件和私钥本身具有正确的权限和所有权。
- 检查服务器是否允许基于密钥的身份验证。
- 确保 SSH 客户端可以读取私钥。
- 您可能正在使用 OpenSSH 服务不再支持的私钥。这通常会在使用私有 SSH DSA 密钥时产生影响。所以尝试创建一个 2048 位的 RSA 密钥对。
简单的 3 个步骤:
- 生成 SSH 密钥对 - 将公钥复制到 Ubuntu 服务器 - 登录远程服务器
注意:去掉'#'并执行
1.生成SSH Key Pair [serverB] [Public key + Private key]
#mkdir –p $HOME/.ssh #创建一个隐藏目录来存储你的 SSH 密钥
#chmod 0700 $HOME/.ssh #根据需要修改该目录的权限
#ssh –keygen –t rsa 4096 #create a 2048-bit RSA key pair #server 会要求你创建一个密码短语作为额外的安全层,如果需要你可以添加一个输入一个难忘的密码短语,然后按 Enter 或者你可以跳过它。
2.将公钥复制到[serverA]
#系统会将~/.ssh/id_rsa.pub的内容从客户端系统复制到服务端系统的~/.ssh/authorized_keys目录下。
#ssh-copy-id ubuntu@<server_IP> #######重要########
或手动将 SSH 密钥复制到 [serverA]
#cat ~/.ssh/id_rsa.pub | ssh username@<server_IP> "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"
#将 server_IP 替换为您的服务器的实际 IP 地址。
3.登录远程服务器
#ssh ubuntu@server_IP
一旦你能够 SSH 重试 scp
如评论中所述,您没有指定身份文件。
默认情况下,将检查一组特定的文件名,例如
~/.ssh/id_rsa
,并且您的身份文件不是这样命名的。因此ssh
没有找到私钥。使用 指定身份文件
-i
,例如ssh -i ~/.ssh/id_rsa_dev-example-com user@host
。或者将文件重命名为默认值,例如mv ~/.ssh/id_rsa_dev-example-com ~/.ssh/id_rsa
.