我可以使用命令行通过 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/config
,ssh
告诉是使用你的配置文件而不是 root 的配置文件。请注意,该部分将在作为参数传递给(然后)~/
之前由 shell 展开,因此 shell 会将其展开为sudo
ssh
你的主目录而不是根目录。
但是,我还没有测试过,但我认为IdentityFile ~/.ssh/id_rsa
配置文件中的条目会损坏,因为它们将被解析为 root 的 ~/.ssh 目录。您可能需要提供主目录的明确路径,而不是快捷方式~
。另一种可能性是添加-i ~/.ssh/id_rsa
到命令行,这样它就会再次被以您身份运行的 shell 扩展。
此外,您可能会收到有关未知主机等的警告,因为您将使用 root 的 ~/.ssh/known_hosts 文件。