创建 SSH 隧道无法与代理配合使用

创建 SSH 隧道无法与代理配合使用

我可以使用命令行通过 SSH 访问服务器:

ssh my-server

使用这个 .ssh/config 文件:

Host *
 AddKeysToAgent yes
 UseKeychain yes
 IdentityFile ~/.ssh/id_rsa

 Host my-server
  HostName 1.2.3.4
  User user
  ProxyJump some.proxy.com
  IdentityFile ~/.ssh/id_rsa

但是,如果我想创建一个与服务器的隧道以通过浏览器访问它,例如使用:

sudo ssh -L 80:my-server:80 my-server

我收到以下错误:

ssh: Could not resolve hostname my-server: nodename nor servname provided, or not known

我猜想以这种方式使用 ssh 会忽略文件中配置的代理.ssh/config。这是正确的还是我遗漏了其他内容?我还可以尝试其他方法吗?

答案1

ProxyJump在评论中寻找一些无关紧要的东西后,我非常确定实际问题与或隧道无关-L;而是因为sudo。运行会在 root 用户 ID 下sudo ssh运行ssh命令,因此它会在 root 帐户的主目录下而不是您的主目录下查找 .ssh/config。而且 ~root/.ssh/config 没有 的条目my-server(如果它存在的话)。

您应该能够通过添加选项来解决这个问题-F ~/.ssh/configssh告诉是使用你的配置文件而不是 root 的配置文件。请注意,该部分将在作为参数传递给(然后)~/之前由 shell 展开,因此 shell 会将其展开为sudossh你的主目录而不是根目录。

但是,我还没有测试过,但我认为IdentityFile ~/.ssh/id_rsa配置文件中的条目会损坏,因为它们将被解析为 root 的 ~/.ssh 目录。您可能需要提供主目录的明确路径,而不是快捷方式~。另一种可能性是添加-i ~/.ssh/id_rsa到命令行,这样它就会再次被以您身份运行的 shell 扩展。

此外,您可能会收到有关未知主机等的警告,因为您将使用 root 的 ~/.ssh/known_hosts 文件。

相关内容