Cygwin netcat nc 无法通过 /etc/hosts 解析主机

Cygwin netcat nc 无法通过 /etc/hosts 解析主机

我正在尝试使用 ssh 登录远程服务器,我在 ~/.ssh/config 中设置了一个 ProxyCommand 来使用代理(通过 PuTTY 设置连接到 VPN)。ProxyCommand 使用 nc 通过代理进行连接(如对如何使用带有 SOCKS 5 代理的 SSH?),但 nc 似乎无法在将主机名发送到代理之前通过 /etc/hosts 将其解析为 IP,而代理也不知道如何解析主机名。

例如:

$ cat /etc/hosts
127.0.0.1       localhost
12.34.56.78     hostname1
12.34.56.79     hostname2


$ cat ~/.ssh/config
ProxyCommand /usr/bin/nc -x 127.0.0.1:7777 %h %p

请注意,端口 7777 在 PuTTY 中配置为动态端口。

$ cat /etc/resolv.conf
lookup  file bind


$ cat /etc/nsswitch.conf
hosts:  files dns

如果我使用 ssh[电子邮件保护]然后连接成功,但如果我使用 ssh user@hostname1,则 hostname1 会被传递给代理,而不是解析为 12.34.56.78,连接就会失败。有谁知道需要进行哪些配置才能使 netcat 主机名解析通过 /etc/hosts 在 cygwin 中工作?

谢谢

答案1

那里发生的情况是您正在使用 ssh_config %h 替换,但根据手册,这并不意味着替换的值也将以任何方式进行预处理。

但是,因为命令是通过 shell 传递的,所以您可以使用子 shell 来运行执行名称解析的命令,如下所示:

ProxyCommand /usr/bin/nc -x 127.0.0.1:7777 $(perl -MSocket -le 'print inet_ntoa inet_aton shift' %h) %p

具体命令由https://unix.stackexchange.com/questions/71379/host-lookup-that-respects-etc-hosts

答案2

/etc/hosts 是否以所需的行尾结尾(CR 或 CRNL)正确分隔?

nc 是否会忽略 /etc/hosts 并查看 %windir%\system32\drivers\etc\hosts?

相关内容