兼容所有系统的局域网传输文件通用方法

既然要通讯,那么必须有服务器和客户端。本文使用sshd做服务器,scp做客户端。
接受文件的一方必须使用sshd启动并绑定本机局域网端口,如0.0.0.0:22
绑定方法就是配置/etc/ssh/sshd_config这个配置文件,如果A(windows/linux/macos)向B(windows/linux/macos)发送文件,那么有两种方式:
假设A的用户名为userA,IP为192.168.1.10,文件路径/1.txt

  1. A运行sshd服务/usr/sbin/sshd,B运行scp [email protected]:/1.txt 1.txt
  2. B运行sshd服务/usr/sbin/sshd,B运行scp 1.txt [email protected]:/1.txt

这里有几点注意:

  1. 如何在windows上运行sshd服务器
    linux怎么运行sshd就不必说了吧,很容易搜到。这里只讨论windows的,推荐git for windows自带的sshd.exe,scp.exe,ssh.exe,ssh所用账号密码也用windows自身账号密码即可。最好安装everything这个工具,可以搜到传过来的文件保存在哪里,git自带ssh根目录是git安装目录。注意git自带ssh的配置文件在:git根目录/etc/ssh/sshd_config。另外在登录git自带sshd服务时,使用的也是windows自带的账号密码,这样很方便。同时git自带的passwd命令还可以改登录密码
  2. 如何配置sshd做局域网服务器
    对sshd_config做如下改动:
    a. ListenAddress 0.0.0.0 这一行取消注释(#号)

    b. GSSAPIAuthentication yes 这一行yes改no并取消注释

  3. 加速传输
    首先是解决每次执行scp需要密码的问题。如果要免密登录,需要用ssh-copy-id命令,如ssh-copy-id [email protected]。该命令windows是没有的,如果你要在winows上用scp命令达到免密登录,那么要运行一个python脚本:
import argparse, os
from subprocess import call

def winToPosix(win):
    posix = win.replace('\\', '/')
    return "/" + posix.replace(':', '', 1)

parser = argparse.ArgumentParser()
parser.add_argument("-i", "--identity_file", help="identity file, default to ~\\.ssh\\idrsa.pub", default=os.environ['USERPROFILE']+"\\.ssh\\id_rsa.pub")
parser.add_argument("-d", "--dry", help="run in the dry run mode and display the running commands.", action="store_true")
parser.add_argument("remote", metavar="[email protected]")
args = parser.parse_args()

local_key = winToPosix(args.identity_file)
remote_key = "~/temp_id_rsa.pub"

scp_command = "scp {} {}:{}".format(local_key, args.remote, remote_key)
print(scp_command)
if not args.dry:
    call(scp_command)

ssh_command = ("ssh {} "
                 "mkdir ~/.ssh;"
                 "touch ~/.ssh/authorized_keys;"
                 "cat {} >> ~/.ssh/authorized_keys;"
                 "rm {};").format(args.remote, remote_key, remote_key)
print(ssh_command)
if not args.dry:
    call(ssh_command)

然后解决scp传输速度越要越慢的问题。我这里局域网是100Mbps的,然而scp传输文件时,最开始能达到3M,最后慢慢降到1M以下,所以单纯用scp也不行的。在使用scp的时候,使用-o "Compression yes"能使速度稳在4M,即:scp -o "Compression yes" 1.txt [email protected]:/1.txt

原文地址:https://www.cnblogs.com/lichao890427/p/12001230.html

时间: 2024-10-11 11:30:59

兼容所有系统的局域网传输文件通用方法的相关文章

socket局域网传输文件

其中发送端发送多少数据可以定制,(可以使用for循环循环读取文件并且send),但是在recv端,不能采用for循环定制recv大小,(及时最后加了if语句判断图像是不是接收完毕),另外在fwrite文件中的第二个参数,绝对不要定制,因为网络是不确定的你不知道socket缓冲区中的文件的确定数目,你recv写明接收8k,但是缓冲分区只有4k你也只能接4k,当你fwrite还写8k就有问题(fwrite写的时候最后用recv的返回值,表示正确接收字节数目). recv端代码: while(coun

Android网络编程只局域网传输文件

Android网络编程之局域网传输文件: 首先创建一个socket管理类,该类是传输文件的核心类,主要用来发送文件和接收文件 具体代码如下: 1 package com.jiao.filesend; 2 3 import java.io.BufferedReader; 4 import java.io.BufferedWriter; 5 import java.io.FileInputStream; 6 import java.io.FileOutputStream; 7 import java

[转]CSS完美兼容IE6/IE7/IE8/IE9/IE10的通用方法

CSS完美兼容IE6/IE7/IE8/IE9/IE10的通用方法 2013-12-12  By 奥夫 关于CSS对各个浏览器兼容已经是老生常谈的问题了, 网络上的教程遍地都是.以下内容没有太多新颖, 纯属个人总结, 希望能对初学者有一定的帮助. 一.CSS HACK 以下两种方法几乎能解决现今所有HACK. 1, !important 随着IE7对!important的支持, !important 方法现在只针对… 一.CSS HACK 以下两种方法几乎能解决现今所有HACK. 1, !impo

Linux系统远程服务器传输文件

本篇文章内容介绍本地计算机与linux远程服务器之间传输文件 本地计算机与linux远程服务器之间传输文件 准备 1.一台远程服务器(需要登录的账号和密码) 2.一台能正常连上互联网的本地计算机 3.下载安装xftp软件 xftp软件下载地址https://www.netsarang.com/zh/xftp/ 打开xftp软件 新建会话 点击确定,连接,就可以把本地文件上传到服务器中了 原文地址:https://www.cnblogs.com/tigertank/p/11612672.html

linux系统上传下载文件的方法

linux系统上传.下载文件的方法有很多种,最常见的有ftp(需要安装ftp软件及配置),这里不做介绍, 下面介绍我常用的两种方式: 1.sftp方式(通过SecureCRT工具的ssh服务传输): 1.打开CRT工具自带的sftp(通过Alt+P命令打开),如图: 默认进入当前用户的家目录,可以自行cd命令切换到上传.下载的目录(windows操作文件系统需要在命令前加 l 参数,如lcd e:\到E盘根目录,lls列出根目录下的文件),上传通过put 加文件名,下载通过get 加文件名) 2

Linux培训教程 linux系统下分割大文件的方法

在linux中分割大文件,比如一个5gb日志文件,需要把它分成多个小文件,分割后以利于普通的文本编辑器读取. 有时,需要传输20gb的大文件,Linux培训 教程件到另一台服务器,也需要把它分割成多个文件,这样便于传输数据. 以下通过五个不同的例子,来讲解Linux下分割大文件的方法,供大家参考. 例1.以每个文件1000行分割 split命令分割文件成每个文件1000行,并且文件名依次为 [前缀]aa,[前缀]ab, [前缀]ac等,默认的前缀是X,每个文件的行数为1000行. 命令: 复制代

局域网传输文件Demo

客户端 import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFound

Socket局域网多线程传输文件的方法

1.思路:为了实现各种大小的文件都可发送和接收,可设置缓冲区循环发送和接收,并记录文件读到的位置,如果某次读入到缓冲区的字节数小于缓冲区的大小,则说明文件发送完了,退出发送循环,关闭连接.并且Csocket是阻塞的,接收端接能接收到发送端发送的所有内容,直到发送端连接关闭,接收端退出接收循环. //循环发送文件 2.主要代码 发送端: do { file.Seek(step,CFile::begin); over=file.Read(buffer,BUFFERSIZE);//文件读入缓冲 err

CSS完美兼容IE6/IE7/IE8/IE9/IE10的通用方法

关于CSS对各个浏览器兼容已经是老生常谈的问题了, 网络上的教程遍地都是.以下内容没有太多新颖, 纯属个人总结, 希望能对初学者有一定的帮助. 一.CSS HACK 以下两种方法几乎能解决现今所有HACK. 1, !important 随着IE7对!important的支持, !important 方法现在只针对… 一.CSS HACK 以下两种方法几乎能解决现今所有HACK. 1, !important 随着IE7对!important的支持, !important 方法现在只针对IE6的HA