什么是 redrouter.agent.ssh-proxy?
redrouter.agent.ssh-proxy 是一个基于 SSH 隧道的代理工具,可以让你在本地和远程服务器之间创建一个安全的通道。使用该工具可以实现诸如跳板机、本地端口转发等多种网络连接方案。
安装和使用
安装
npm install redrouter.agent.ssh-proxy -g
使用
- 创建一个 SSH 配置文件,比如
ssh_config
,写入以下内容:
Host my_remote_server Hostname <remote_host> User <remote_usrname> IdentityFile <path_to_private_key> Port <remote_port> ProxyCommand /usr/local/bin/redrouter.agent.ssh-proxy --parenttty --host %h --port %p
其中,my_remote_server
是一个 SSH 连接别名,<remote_host>
是远程服务器地址,<remote_usrname>
是远程服务器的用户名,<path_to_private_key>
是本地私钥文件路径,<remote_port>
是远程服务器的 SSH 端口。
- 运行 SSH:
ssh my_remote_server
这时你应该成功连接到远程服务器了。
如果想要使用本地端口转发,修改配置文件,增加如下内容:
LocalForward <local_port> <remote_host>:<remote_port>
其中,<local_port>
是本地开放的端口,<remote_host>
和 <remote_port>
是需要转发到的远程主机和端口。
- 使用本地程序连接这个端口:
telnet localhost <local_port>
这时你应该成功连接到远程服务器的 <remote_port>
端口了。
配置文件详解
配置文件使用 OpenSSH 的配置格式,除了前面已经讲过的内容外,其他值的含义可以参考 官方文档。
值得一提的是,redrouter.agent.ssh-proxy 使用了一个特殊的 ProxyCommand,它替换了 OpenSSH 默认的 nc 命令,用来进行 SSH 隧道代理。%h
和 %p
是 OpenSSH 自带的变量,分别代表 SSH 连接的目标主机和端口。如果不设置 ProxyCommand,那么就无法连接到远程服务器了。
使用场景
远程服务器访问
在某些场景下,我们只能通过跳板机或者 VPN 来访问某个远程服务器。使用 redrouter.agent.ssh-proxy 可以打通这个限制。
本地开发环境访问
在本地开发环境中,我们可能需要访问远程服务器上的某些服务端口。使用 redrouter.agent.ssh-proxy 可以创建一个安全的 SSH 隧道,将远程端口映射到本地端口上,便于开发调试。
内网穿透
在内网环境中,我们可能需要将本地服务暴露给外网访问。使用 redrouter.agent.ssh-proxy 可以创建一个 SSH 隧道,将本地端口通过 SSH 代理到一个外网服务器上,实现内网穿透。
示例代码
创建一个 SSH 配置文件 ssh_config
:
Host my_remote_server Hostname 192.168.1.101 User user IdentityFile ~/.ssh/id_rsa Port 22 ProxyCommand /usr/local/bin/redrouter.agent.ssh-proxy --parenttty --host %h --port %p
在本地启动转发到远程主机的 3000 端口:
ssh -L 3000:192.168.1.101:3000 my_remote_server
在浏览器中打开 http://localhost:3000
,即可访问远程主机的 3000 端口了。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60067007e361a36e0bce8a74