需求:同一局域网目标服务器 Mac 名是 tommac,用户 tom,ip:192.168.50.4,本地服务器 Mac 名是 jasonmac,用户 jason.需要把 /Users/tom/Documents/working/purchase.xlsx 复制到 /Users/jasonmac/Documents/working
尝试了 pysmb 和 paramiko 两个库
前者报 not connected,后者报 Error reading SSH protocol banner.总之就是各种连接不上目标服务器.(确认目标服务器已经打开共享,并且在网络里可以访问) 同时我也有点搞不清楚,mac 的计算机名到底应该是 jason 这种,还是 jason.local,似乎尝试了也都错.端口不管是官网范例的 139,还是很多人用的 445 都不行.
stackoverflow 上看了好半天都研究不出,有没有熟悉的朋友说下可能的原因?或者推荐下自己熟悉的库 预先感谢大家!
下面是 pysmb 时候的一段代码(import 部分忽略)
share_name = "jason" user_name = "jason" password = "57777" local_machine_name = "tommac" server_machine_name = "jasonmac" server_ip = "192.168.50.4"
conn = SMBConnection(user_name, password, local_machine_name, server_machine_name, use_ntlm_v2=True) assert conn.connect(server_ip, 139) print('connected')
file_obj = tempfile.NamedTemporaryFile() file_name = file_obj.name file_attributes, copysize = conn.retrieveFile(share_name, "/Documents/working/purchase.xlsx", file_obj) print(copysize) file_obj.close() shutil.copy(file_name, "/Users/tom/Documents/working/purchase.xlsx") conn.close()
1
epicnoob 2020-07-24 23:02:06 +08:00 1
python -m http.server 6666
|
2
polaa 2020-07-24 23:16:06 +08:00
不是很懂目的是什么。。。。scp 不行么
|
3
leimao 2020-07-24 23:17:47 +08:00 via iPhone
asyncssh 用一下
|
4
plko345 2020-07-24 23:22:39 +08:00 via Android
那你到底用什么协议,又是 ssh 又是 smb 的,为什么要同时用,有测试过可用吗?
|
5
youthfire OP @plko345 #4 平时都是 smb,搞不出就一顿乱试了。主要是 python 中一段自动化需要经常从目标机器拷贝一个文件,现在都是手动在下载。
|
6
jimrok 2020-07-24 23:25:06 +08:00
rsync 不行吗?
|
8
laminux29 2020-07-24 23:50:02 +08:00
局域网文件拷贝,直接 tcp 不香吗,干嘛要整 pysmb 或 paramiko 。
|
10
renmu123 2020-07-25 10:07:40 +08:00 via Android
paramiko 走得是 ssh,文件传输是 sftp,你试试看能不能通过一台电脑 ssh 到另一台电脑
|
11
lolizeppelin 2020-07-25 10:10:47 +08:00
文件传输 l 老老实实调用 shell 才是正道,因为 python 太慢了,ssh 协议这种有加密解密的更慢
除非有比较特殊的文件过滤机制必须在代码里,才考虑用 python 写传输过程 |
12
xyjincan 2020-07-25 10:28:21 +08:00 1
python 起个 http 服务啊
|
13
aladdindingding 2020-07-25 11:34:05 +08:00
@lolizeppelin python 表示不背慢这个锅
|
14
youthfire OP @renmu123 谢谢提醒! 我检查了 sharing 设置,打开了 file sharing,但原来还有个 remote login 控制 ssh 部分. 回头我再试下去.
|