你好我已经在服务器 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
答案1
正如评论中所述,您没有指定身份文件。
默认情况下,将检查一组特定的文件名,例如~/.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
。
答案2
加密密钥是一组用于建立安全连接的访问凭据。远程 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 密钥对 [serverB] [公钥 + 私钥]
#mkdir –p $HOME/.ssh #创建一个隐藏目录来存储你的 SSH 密钥
#chmod 0700 $HOME/.ssh #根据需要修改该目录的权限
#ssh –keygen –t rsa 4096 #创建 2048 位 RSA 密钥对 #服务器将要求您创建一个密码作为额外的安全层,如果需要,您可以输入一个容易记住的密码,然后按 Enter 键,或者您可以跳过它。
2.将公钥复制到[serverA]
#系统会将客户端系统的~/.ssh/id_rsa.pub内容复制到服务器系统的~/.ssh/authorized_keys目录中。
#ssh-copy-id ubuntu@<服务器IP> #######重要#######
或者手动将 SSH 密钥复制到 [serverA]
#cat ~/.ssh/id_rsa.pub | ssh 用户名@<服务器IP> "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"
#将 server_IP 替换为您服务器的实际 IP 地址。
3.登录远程服务器
#ssh ubuntu@服务器IP
一旦能够 SSH,请重试 scp