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 能支持这个需求吗?
1
ysc3839 2020-01-30 18:46:35 +08:00 via Android
用 SCP 协议不行吗?
|
2
phpfpm OP @ysc3839 行,主要是我是要在一个别的进程里面拿到这个文件,ssh cat 直接就拿到字节流了,scp 还得再生成一个临时文件;
但是问题都是: 我单次都是只获得一个文件,scp 也是一次一文件,有连接开销的。 |
5
Buges 2020-01-30 18:57:27 +08:00 1
libssh
|
6
publicccc 2020-01-30 19:46:23 +08:00
可以参考下 sz 和 rz 的实现,
猜测可能是服务端输出特殊的编码使得 ssh 客户端识别到是在发送文件。 自己实现的话方案应该是找一个 ssh 库,自己读取输出识别编码。 |
7
phpfpm OP |
8
guoshim 2020-01-30 19:48:28 +08:00
可以用管道来控制另一个进程,并监测另一个进程的 stdin/stdout/stderr。Python 里面有个包叫 pexpect,可以搞这个,也可以自己手撸。
或者按照楼上所说,libssh。 |
9
superrichman 2020-01-30 19:52:55 +08:00 via iPhone
用 python 的 paramiko 模块,能执行 shell 命令也可以下载文件,写代码建立连接一直不关就好了
|
10
phpfpm OP @guoshim 优秀!!
php 下面不知道这个方案是不是好 work,我先用 libssh2 了 ubuntu19.04 ``` # apt install php-ssh2 # php -i | grep ssh2 $ composer require degagne/libssh2 ``` 齐活! |
11
cy97cool 2020-01-30 20:58:31 +08:00 3
直接 sshfs 把远程服务器的目录挂载不就完事了?
|
12
winglight2016 2020-01-31 09:30:05 +08:00
@cy97cool 还有这种操作,学习了!
|