![为什么这个 ssh 隧道命令在 Mac 上会出错,而在 Linux 上不会出错?](https://linux22.com/image/168391/%E4%B8%BA%E4%BB%80%E4%B9%88%E8%BF%99%E4%B8%AA%20ssh%20%E9%9A%A7%E9%81%93%E5%91%BD%E4%BB%A4%E5%9C%A8%20Mac%20%E4%B8%8A%E4%BC%9A%E5%87%BA%E9%94%99%EF%BC%8C%E8%80%8C%E5%9C%A8%20Linux%20%E4%B8%8A%E4%B8%8D%E4%BC%9A%E5%87%BA%E9%94%99%EF%BC%9F.png)
我试图通过远程登录服务器将 psql 连接隧道连接到 postgres 数据库服务器,并且我在解析参数的方式上遇到了某种差异,这导致了调试一段时间的麻烦。
在装有 bash 5.0.11 和 OpenSSH_8.1p1 的 Linux 计算机上,我可以在不同的控制台中使用以下命令成功执行此操作:
ssh -N -T -L 50000:pgsql96.database.server:5432 [email protected]
psql -h localhost -p 50000 -d databasename -U user
在装有 bash 3.2.57 和 OpenSSH_7.9p1 的 Mac 计算机上,当我运行相同的隧道命令时
ssh -N -T -L 50000:pgsql96.database.server:5432 [email protected]
我收到以下错误
错误的本地转发规范 '50000:pgsql96.database.server:5432[电子邮件受保护]'
最终,我意识到命令行参数解析一定存在差异,因为上面的字符串在转发中引用了远程登录服务器,我通过添加以下内容修复了该命令--
:
ssh -N -T -L 50000:pgsql96.database.server:5432 -- [email protected]
为什么这两个版本之间这些参数的解析方式不同,以及我应该何时预期会出现这种行为差异?