我使用 Ubuntu 16.04 AMI 创建了一个 ec2 实例。我使用以下命令为该 AMI 创建了一个 sudo 用户:
sudo adduser myuser
sudo usermod -aG sudo myuser
然后我尝试使用我已经拥有的 rsa 密钥对授予用户 ssh 访问权限。我为新用户创建了一个 .ssh 目录:
mkdir ~/.ssh
chmod 700 ~/.ssh
vim ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
我将我的公钥复制并粘贴到“authorized_keys”中。然后我退出 ec2 并使用以下命令测试我的连接:
cd ~/.ssh
ssh -i "mypem.pem" [email protected]
我收到一条错误消息,显示“拒绝访问(公钥)”
所以我放弃了该用户并创建了另一个用户。这次我使用 nano 而不是 Vim 创建了“authorized_keys”文件,并且成功了。
有人经历过这种情况吗?
答案1
可能是你粘贴错了。
- 它是以
ssh-rsa
还是以 开头ssh-ed25519
? - 前面是否有空格(不应该)
- 大小写是否保留?
- 行末的任何注释前是否有空格?
在 vim 中粘贴任何内容之前,您应该使用:set paste
,因为它会关闭任何可能的活动自动完成/自动缩进/...宏。
另一件事是,您写的是mykey.pem
,这是 openssl 文件的常用扩展名,而不是 ssh-keys。您确定您使用id_rsa.pub
/id_ed25519.pub
作为 ssh-pubkey 吗?
答案2
如果发生这种情况,我建议检查ViM 中的 和fileencryption
。比较两个文件,一个是用 nano 编辑的,另一个是用 vim 编辑的。用 vim 打开它们并检查以下内容:fileformat
bomb
:set bomb?
这是字节顺序标记。通常在 Windows 上使用 notepad.exe 编辑 UTF-8 文件时设置。我经常遇到这个问题。
:set ff?
文件格式dos
或unix
.dos 的行尾与 unix 不同。
:set fenc?
文件编码:也许一个编辑器将其更改为 latin1 而不是 UTF-8。
答案3
myuser 必须有权访问 .ssh 和 keyfile。检查谁拥有它们。