我想要通过位于公共子网上的 Linux SSH 堡垒服务器连接到私有子网上的 Linux 数据库服务器。我还想创建到端口 3306 的隧道。
当我尝试从 Bastion 服务器创建 SSH 连接时,收到“权限被拒绝(公钥)。”消息。
ssh -L 10.0.0.10:22:10.0.1.10:22 [email protected]
这是失败处的调试输出:
> debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /root/.ssh/identity
debug1: Trying private key: /root/.ssh/id_rsa
debug1: Trying private key: /root/.ssh/id_dsa
debug1: No more authentication methods to try.
Permission denied (publickey).
正确的公钥已经在数据库服务器上,所以我认为我需要在某处输入私钥 RSA。我在哪里输入私钥?此外,在 3306 上创建隧道是否需要更改 sshd 配置?
答案1
client <-----> Bastion Server <-----> Database Server
(10.0.1.10) (10.0.0.10)
那么,尝试一下这个:
$ ssh -C -N -L 3306:10.0.0.10:3306 [email protected]
然后你可以通过执行以下命令连接到数据库服务器:
$ mysql -u <user> -p -h localhost
我应该在哪里输入私钥?
默认值为~/.ssh/
,但您可以将其放置在任何您想要的位置并使用-i
选项指定。
另外,在 3306 上创建隧道是否需要更改 sshd 配置?
确保该行AllowTcpForwarding
已被注释掉或设置为yes
。
答案2
主要原因似乎与堡垒主机上的 ssh 密钥有关。如果您没有以 root 身份登录堡垒主机(您不应该这样做),那么您以 root 身份登录的用户可能没有主目录并试图使用 root 的主目录?如果您是以 root 身份登录堡垒主机,您可能不应该这样做。
您是否在原始主机上使用 ssh-agent?查看堡垒主机上的 /etc/ssh/sshd_config。如果 AllowAgentForwarding 为“否”,请尝试将其更改为“是”并重新启动 sshd。如果您在原始主机上没有使用 ssh-agent,您可能需要考虑这样做,因为这将保留您的密钥并允许将其转发到远程 ssh 连接(例如堡垒主机)。
另一个选项是在 DB 机器上启用密码验证,这样当无法进行公钥验证时它不会失败。检查 DB 机器上的 /etc/ssh/sshd_config 中的 PasswordAuthentication,确保它未设置(默认为“是”)或设置为“是”。
运行 ssh 时,可以向其传递多个 -v 参数以提高调试级别。有时这有助于准确显示问题所在。