我想在VS代码中通过SSH从我的本地计算机A通过代理B到目标主机C。我发现. SSH from A through B to C, using private key on B [closed]中有一个很好的讨论。我遵循了最佳答案,在~/.ssh/config中添加了一些行:
Host C
ProxyCommand ssh -o 'ForwardAgent yes' B 'ssh-add && nc %h %p'
但不起作用,并引发错误Bad configuration option: 'forwardagent
。我发现只有一个单引号,并猜测可能是引号有问题,然后我将所有单引号更改为双引号,例如:
Host C
ProxyCommand ssh -o "ForwardAgent yes" B "ssh-add && nc %h %p"
结果成功了。
我不知道为什么,对这种现象很好奇.
我尝试用几个shell来测试单引号/双引号:双引号在每个shell中都是可以的,但是单引号只能在PowerShell上使用,而不能在cmd上使用。
我在谷歌上搜索了单引号和双引号的区别,了解到它们在处理符号“$"后面的文本时是不同的。但仍然没有解释我的问题。
我真的很想知道为什么这个小的变化使我的配置工作,为什么其他人也可以很好地与代码中提到的讨论与单引号。
1条答案
按热度按时间kb5ga3dv1#
OpenSSH只将双引号(而不是单引号)记录为有效的字符串引号字符。请参见OpenBSD OpenSSH config手册页:https://man.openbsd.org/ssh_config.5 .
为了便于交叉引用(虽然当你有正式的手册页时,这并不是必须的),也可以参见ssh.com的配置文件格式页面中的“SSH客户端配置文件ssh_config的格式”一节,以及其他在google搜索中排名靠前的网页:https://phoenixnap.com/kb/ssh-config#ftoc-heading-4网站。
正如您在我的提示下进行的试验中发现的那样,从PowerShell运行时需要使用单引号,而从cmd.exe运行时则不需要。因此,这可能是shell的问题,OpenSSH不会将单引号视为具有任何特殊含义,而是将其直接传递给shellPowerShell接受单引号或双引号来引用字符串参数(docs),但cmd.exe仅对字符串参数使用双引号(related GNU docs),并且仅对要在
FOR /F
语句中运行的命令使用单引号(related Q&A)superuser.com。