我想设置到虚拟机计算机上的 mysql 服务器的 ssh 隧道。此外,如果计算机重新启动,隧道必须正常工作。
假设 A 是安装了 Linux 软件的计算机。B - 计算机 A 中的虚拟机。
MySQL 在 B 中。
C - 是计算机 A 中的虚拟机,它想要连接到 B 中的 MySQL。
我尝试将公钥复制到远程服务器。我想我需要将其复制到计算机 A。
ssh-copy-id -i id_rsa.pub.bak [user]@[IP of A] -p [port of A]
Enter passphrase for key '/home/[user]/.ssh/id_rsa':
Permission denied (publickey).
现在我尝试输入文件 id_rsa.pub.bak 的密码。它拒绝了。
然后我看到它使用的密钥在 /home/[user]/.ssh/id_rsa 中,这与我试图复制的公钥不同,我的意思是私钥当然不同,但我的意思是我复制了另一个私钥的公钥。所以我尝试使用它的密码。也被拒绝了。
我该如何调试密码被拒绝的原因?
更新
根据评论,我创建了名为 id_rsa.pub 的新公共文件,其中所有内容现在都在一行中
并运行,仍然出现错误。
ssh-copy-id -i id_rsa.pub [host and port] -vvv
Enter passphrase for key '/home/[user]/.ssh/id_rsa':
Permission denied (publickey).
更新
检查了 A 计算机中 .ssh 文件夹和 authorized_keys 文件的权限 - 它们是 700 和 600,因此评论说它们是好的。
更新
尝试在 A 电脑上设置密码验证为是,然后重新启动服务。按照答案重新启动不起作用,它显示 sshd 无法识别,所以我使用以下命令重新启动:
sudo /etc/init.d/ssh restart
然后在C机器上再次尝试复制到A机器。
ssh-copy-id -i id_rsa.pub [user@host] -p [port] -v
还是一样:
Enter passphrase for key '/home/[user]/.ssh/id_rsa':
Permission denied (publickey).
如果我手动将密钥复制到 authorized_keys,我会看到公钥已经存在,与我想要复制的相同。我问我的同事,他说他没有复制它。所以我甚至不明白它怎么会在那里。
好的,如果它在那里就好了,但是如果留在那里,它不允许我在不输入密码的情况下使用 ssh 连接。但我可以通过输入密码来连接。所以这里显然还是有问题。我试图复制的密钥的密码是空的。当我使用 ssh 连接时 - 我输入了一个非空的密码。
同一个公钥不能接受空密码和非空密码,这是有道理的。但是,如果密码不同,为什么我尝试上传的公钥与 authorized_keys 文件中的公钥相同?我没有检查每一个字符,但我认为密钥不太可能如此相似,以至于即使密码不同,开头和结尾也会相同。
答案1
您实际上需要登录才能复制密钥,您无权访问远程机器(无效密钥和密码验证已禁用):
在 /etc/ssh/sshd_config 中重新启用密码验证:
PasswordAuthentication yes
然后重启服务:
service sshd restart
复制你的公钥:
ssh-copy-id -i ~/.ssh/id_rsa.pub USER@HOST -p PORT
[Enter user password]
尝试再次登录,不需要密码。
然后禁用密码验证。
答案2
Permission denied (publickey)
远程 SSH 服务器是否在说“我只接受公钥作为身份验证方法,请离开”。
这是你面临的主要挑战:进入远程系统。一旦你能做到这一点,你就可以上传你的密钥:
ssh-copy-id
例如,如果您正在替换旧密钥,使用- 它将允许您指定不同的密钥。- 编辑远程用户
~/.ssh/authorized_keys
以手动附加您的密钥。
答案3
终于找到问题了。
实际上我不需要复制公钥。两个私钥(带密码和不带密码)都有相同的公钥。 我以为我有没有密码的私钥,但实际上我没有。我只有没有密码的 .ppk。那是沟通失误。所以同事制作了没有密码的私钥,所以现在我可以使用没有密码的 ssh 登录。我读到没有密码是不好的,但同事说没问题。我需要没有密码,因为我需要在重启时运行 shell 脚本 - 我想在计算机重启时启动 autossh。
所以这次的解决方案是 - 如果您想在没有密码的情况下登录 - 请检查您的私钥是否真的没有密码。