使用单个 SSH 连接像本地一样访问远程服务

使用单个 SSH 连接像本地一样访问远程服务

是否可以创建一个 SSH 隧道来寻址远程主机,就像它位于本地系统上一样,例如。输入以下伪示例本地并达到想要的效果:

  • 复制数据库:mysqldump remote | mysql localmysqldump local | mysql remote
  • 将文本附加到远程文件:echo blah >> remote:file.txt
  • 更改远程文件:sed ... remote:file.txt
  • 执行远程命令:apk add blah

如果单个连接不可能,那么实现这些事情最方便的方法是什么?

答案1

要访问远程 mysql,您可以通过转发使用 localhost:12345:

ssh -Nf -L 12345:localhost:3306 user@remote

对于文件操作,您可以通过 sshfs 挂载远程主机:

mkdir /tmp/remote
sshfs user@remote:/ /tmp/remote
echo blah >> /tmp/remote/file.txt
sed ... /tmp/remote/file.txt

通常通过 ssh 执行远程命令:

ssh user@remote command ....

您只需使用一个连接即可完成这一切如果将其添加到 ~/.ssh/config 中:

ControlMaster auto
ControlPath ~/.ssh/masters/%l%r@%h:%p

第一个 ssh 连接将成为主连接,下一个将重新使用它。新的从属连接将非常快速地可用。没有初始密钥交换开销等。

相关内容