在ssh中运行本地命令

我想在ssh会话中运行本地命令,比如:

ssh server

# on server
!<local command> and remote files for executing

# still on the server
some other commands

远程和本地都是Linux系统。我想这应该是可行的,相当于在没有退出ssh会话的情况下,将远程的文件传给本地的命令去执行(比如用本地的编译器去编译一个远程的文件,产生一编译好的文件再传回ssh会话所在的远程路径)。但是我不确定这是否能在现有的ssh中实现。

阅读 2k
2 个回答

使用screen就可以解决切换问题

# 用一下命令创建一个新的session,session-name为名称,自己任意取
screen -mS <session-name>

# 在新会话中执行远程登录 ssh <server>
# 执行一系列云端操作

# 离开当前会话按 Ctrl+A Ctrl+D 

# 执行本地的一系列操作

# 回到云端
screen -r <session-name>
# 继续执行云端操作

以上方案只是方便切换窗口,如果需要在远程执行本地命令的话, 可以使用ssh反向代理

ssh -fTNR <tmp-port>:localhost:22 <user>@<server>

将本地的ssh登录端口代理到云端服务器上,然后再ssh登录到远程服务器

# 在本地执行远程登录 ssh <server>
# 执行一系列云端操作

# ssh <login-name>@127.0.0.1 -p <tmp-port>
# 执行本地的一系列操作
# exit 退出本地shell

# 回到云端
# 继续执行云端操作

这个事情从流程上来说是可以执行的。
首先,ssh是可以多次登录的
其次,在一个本地的命令行环境中是支持多个具体的执行界面的

不过你需要界定你所谓的ssh会话是指什么?
还有你核心的目的是什么?

从我现在来看,你的任务并不需要保持ssh远程会话的必要性。

虽然我前面质疑了 小苏梅 的回答,但他回答中对本地保持ssh状态是没有问题的。类似screen的工具还有tmux 我以往也用screen现在基本都用tmux啦。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏