跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 如何在后台启动一个 ssh 进程,其他进程可以与这个 ssh 进程交互执行命令拿到返回值?
未分類
15 3 月 2020

如何在后台启动一个 ssh 进程,其他进程可以与这个 ssh 进程交互执行命令拿到返回值?

如何在后台启动一个 ssh 进程,其他进程可以与这个 ssh 进程交互执行命令拿到返回值?

資深大佬 : phpfpm 82

X problem:

远程机器上有一些文件( 10~几百 KiB ),不大,如何高效地获取这些文件 /并且在获取之后删除等操作

Y 方案:

获取文件:

$ ssh server cat /path/to/target 

获取返回值;或者用 nginx 通过 http 拿到文件; 删除文件: ssh 远程执行删除

问题: 每次连接初始化的时间过长,由于 ssh 是通过一层隧道( frp )反向连回来的,因此每次获取的 FTTB 略长

想问问有没有什么长连接的方式?

e.g.

如果是手动的话,开启一个 ssh 进程,通过 copy-paste/zmodem/管道(?)的方式,把文件拿到本地,之后删掉文件,避免每次建立连接的开销

emm,so ssh 能支持这个需求吗?

大佬有話說 (12)

  • 資深大佬 : ysc3839

    用 SCP 协议不行吗?

  • 主 資深大佬 : phpfpm

    @ysc3839 行,主要是我是要在一个别的进程里面拿到这个文件,ssh cat 直接就拿到字节流了,scp 还得再生成一个临时文件;

    但是问题都是:

    我单次都是只获得一个文件,scp 也是一次一文件,有连接开销的。

  • 資深大佬 : ysc3839

    @phpfpm 把要获取的所有文件都用 tar 打包,然后 ssh 传过来?

  • 主 資深大佬 : phpfpm

    @ysc3839 我要及时性,emm

  • 資深大佬 : Buges

    libssh

  • 資深大佬 : publicccc

    可以参考下 sz 和 rz 的实现,
    猜测可能是服务端输出特殊的编码使得 ssh 客户端识别到是在发送文件。

    自己实现的话方案应该是找一个 ssh 库,自己读取输出识别编码。

  • 主 資深大佬 : phpfpm

    @Buges 愿闻其详!
    https://github.com/degagne/libssh2
    @publicccc

    sz/rz 用的是 zmodem,这玩意貌似也比较古老了。。

  • 資深大佬 : guoshim

    可以用管道来控制另一个进程,并监测另一个进程的 stdin/stdout/stderr。Python 里面有个包叫 pexpect,可以搞这个,也可以自己手撸。

    或者按照上所说,libssh。

  • 資深大佬 : superrichman

    用 python 的 paramiko 模块,能执行 shell 命令也可以下载文件,写代码建立连接一直不关就好了

  • 主 資深大佬 : phpfpm

    @guoshim 优秀!!
    php 下面不知道这个方案是不是好 work,我先用 libssh2 了

    ubuntu19.04

    “`
    # apt install php-ssh2
    # php -i | grep ssh2

    $ composer require degagne/libssh2

    “`

    齐活!

  • 資深大佬 : cy97cool

    直接 sshfs 把远程服务器的目录挂载不就完事了?

  • 資深大佬 : winglight2016

    @cy97cool 还有这种操作,学习了!

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具