关于scp:文件传输

scp命令的应用引言scp(secure copy)是一个命令行工具,用于在两台机器间平安的传输文件和目录。安全性保障是因为文件和明码在传输时都会加密。能够跨零碎,但倡议传输的两台机器操作系统一样。 一.基于IP,用户名,和明码的文件传输信息流能够是以下模式中的任意一种:本地机器到近程机器;近程机器到本地机器;两个近程机器间(本地机器上操作) 命令应用语法命令应用的根本格局: scp [OPTION] UserName@Source_Host:file1 UserName@Destination_Host:file2要害:文件从前一个对象传输到后一个对象。[OPTION]参数如下: -P 指明近程机器的ssh端口。-p 保留原文件的批改工夫,拜访工夫和拜访权限。-q 不显示传输进度条(传输的过程信息:如传输速度)-C 运行压缩数据-r 复制目录时应用(recursive:递归的)命令应用阐明scp命令的应用时,数据的传输依赖于ssh,因而要提供密钥和明码以在近程机器上认证。复制文件时:必须要有对源文件的读权限和对指标文件的写权限。若两个零碎中有同名同地位的文件,scp命令会覆写文件而不抛出正告信息。 应用示例传输一个本地文件到近程零碎 scp file.txt remote_username@10.10.0.2:/remote/directory #file.txt不重命名scp file.txt remote_username@10.10.0.2:/remote/directory/newfilename.txt #重命名为newfilename.txtscp -P 2322 file.txt remote_username@10.10.0.2:/remote/directory #ssh默认监听端口22。若近程机器ssh监听的不是22,则-P参数指明监听端口scp -r /local/directory remote_username@10.10.0.2:/remote/directory #传输目录和传输文件相似,只需加一个-r参数。本地目录能够用相对路径。file.txt是要传输的本地文件;remote_username@10.10.0.2 是近程机器的用户名和IP/remote/directory是文件要放的近程机器的目录。若不指明此命令,则文件会放在近程机器的用户的家目录。命令执行时,须要输出近程机器用户登录明码。 传输近程机器文件到本地机器 scp remote_username@10.10.0.2:/remote/file.txt /local/directory #将近程机器的file.txt文件复制到本地目录/local/directory下。本地目录须要指明。当前目录用.示意。在两个近程机器间传输文件 #留神:以下命令不反对基于用户名,明码的形式传输。即scp -3 user1@ip1:/files/file.txt user2@ip2:/files,再输出scp -3 user1@host1.com:/files/file.txt user2@host1.com:/files #复制近程机器host1.com上的文件file.txt到近程机器host1.com的/files目录下。#-3选项使得数据传输通过本地机器,若无此选项,则数据间接在两个近程机器上传输。能够从近程先用ssh近程登录到一台近程机器,再从此机器拷贝文件到另一台近程机器。 二.基于密钥的传输从近程到本地机器传输文件 scp -i id_rsa_path username@ip:/remote/file.txt /local/directory #-i参数指明私钥id_rsa这个文件在本地的门路

May 10, 2022 · 1 min · jiezi

关于scp:scp-利用ssh进行文件互传

装置ssh sudo apt-get install ssh拷贝本机文件到指标机器 # scp 须要传送的文件 指标用户名称@指标机器的IP地址:文件将要寄存的地位# 而后输出明码eg.scp test2.mp3 nvidia@192.168.1.102:/home/nvidia/code# 文件夹要-rscp -r ./log nvidia@192.168.1.102:/home/log# 不是默认的22端口scp -P44120 *.pth root@192.168.1.102:/data/models拷贝指标机器文件到本机 scp 指标机器的用户名称@指标机器的IP地址:文件的地位 本机中文件将要寄存的地位eg.scp nvidia@192.168.1.102:/home/nvidia/code/videotest/makefile ./命令参数-p 保留原文件的批改工夫,拜访工夫和拜访权限。 -q 不显示传输进度条。 reference

March 2, 2022 · 1 min · jiezi

两个mac之间快速传递文件

1.电脑设置两台笔记本都需要开通“远程登录”,设置步骤:系统偏好设置->共享->远程登录,结果如图SCP拷贝scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会稍微影响一下速度。当你服务器硬盘变为只读 read only system时,用scp可以帮你把文件移出来。另外,scp还非常不占资源,不会提高多少系统负荷,在这一点上,rsync就远远不及它了。虽然 rsync比scp会快一点,但当小文件众多的情况下,rsync会导致硬盘I/O非常高,而scp基本不影响系统正常使用。1.命令格式:scp [参数] [原路径] [目标路径]2.命令功能:scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。linux的scp命令可以在linux服务器之间复制文件和目录。3.命令参数:-1 强制scp命令使用协议ssh1 -2 强制scp命令使用协议ssh2 -4 强制scp命令只使用IPv4寻址 -6 强制scp命令只使用IPv6寻址 -B 使用批处理模式(传输过程中不询问传输口令或短语) -C 允许压缩。(将-C标志传递给ssh,从而打开压缩功能) -p 保留原文件的修改时间,访问时间和访问权限。 -q 不显示传输进度条。 -r 递归复制整个目录。 -v 详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。 -c cipher 以cipher将数据传输进行加密,这个选项将直接传递给ssh。 -F ssh_config 指定一个替代的ssh配置文件,此参数直接传递给ssh。 -i identity_file 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。 -l limit 限定用户所能使用的带宽,以Kbit/s为单位。 -o ssh_option 如果习惯于使用ssh_config(5)中的参数传递方式, -P port 注意是大写的P, port是指定数据传输用到的端口号 -S program 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。使用实例拷贝文件命令格式: scp local_file remote_username@remote_ip:remote_folder 或者 scp local_file remote_username@remote_ip:remote_file 或者 scp local_file remote_ip:remote_folder 或者 scp local_file remote_ip:remote_file 第1,2个指定了用户名,命令执行后需要输入用户密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名 第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名如果要把远程的拷贝到本地,把第一个路径使用远程的格式即可,如:scp remote_username@remote_ip:remote_folder local_file拷贝目录命令格式: scp -r local_folder remote_username@remote_ip:remote_folder 或者 scp -r local_folder remote_ip:remote_folder 第1个指定了用户名,命令执行后需要输入用户密码; 第2个没有指定用户名,令执行后需要输入用户名和密码;远程连接中文乱码查看本地编码在终端输入localeLANG=“zh_CN.UTF-8"LC_COLLATE=“zh_CN.UTF-8"LC_CTYPE=“zh_CN.UTF-8"LC_MESSAGES=“zh_CN.UTF-8"LC_MONETARY=“zh_CN.UTF-8"LC_NUMERIC=“zh_CN.UTF-8"LC_TIME=“zh_CN.UTF-8"LC_ALL=但是我两台mac的编码是完全一样的,只是一个是mac air ,一个是mac pro,pro连接air显示没问题,air连接pro汉字乱码。乱码解决在pro机器上,也就是远程的机器上执行如下命令:在终端输入:vim ~/.zshrc添加如下内容export LC_ALL=en_US.UTF-8 export LANG=en_US.UTF-8接着重启一下终端,或者输入source ~/.zshrc使设置生效source ~/.zshrc说明其实还是会受到带宽的影响,我的最多就是8M左右,最大的网速,但如果是一个不联网的局域网不知道会不会更快,得到飞鸽的那种上G的速度 ...

March 19, 2019 · 1 min · jiezi

linux上ssh免密登录原理及实现

因为我的服务器集群需要回收日志到中央进行统一处理,所以需要建立ssh互信关系实现免密登录。关于ssh的使用大家可能都很熟悉了,我们今天主要来讲下ssh连接和免密登录的原理。scp 传输文件scp(secure copy)是linux系统下基于ssh登录进行安全的远程文件拷贝的命令。# 传递文件到远程scp local_file remote_username@remote_ip:remote_file# 传递文件夹到远程scp -r local_folder remote_username@remote_ip:remote_folder # 复制远程文件到本地,只是调换下文件参数位置即可scp remote_username@remote_ip:remote_file local_file远程拷贝的命令还有rsync,scp消耗资源少,不会提高多少系统负荷,在这一点上,rsync就远远不及它了。rsync比scp会快一点,但当小文件多的情况下,rsync会导致硬盘I/O非常高,而scp基本不影响系统正常使用。与scp相似的命令是cp,但是cp只能本机拷贝而不能跨服务器,因此需要与ssh合作构成scp命令。我们直接使用scp来跨机器拷贝文件,会提示输入密码:# 提示输入server端服务器的work用户密码[work@client.com ~]$ scp test.php work@server.com:/home/workwork@server.com’s password: 原因就在于,scp是先使用ssh连接服务端机器后,再使用网络来执行远程拷贝(cp)。可以参考ssh的过程:# 同样的提示输入server端服务器的work用户密码[work@client.com ]$ ssh work@server.comwork@server.com’s password: ssh 加密信息Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接。虽然任何网络服务都可以通过SSH实现安全传输,SSH最常见的用途是远程登录系统,人们通常利用SSH来传输命令行界面和远程执行命令。SSH是Telnet/rlogin等非安全shell的替代品,这些协议采用明文传输,会引入许多的安全性问题:如图所示,telnet使用23号端口,所有的信息,包括用户名和密码都是明文传输;而ssh使用22号端口,所有的信息都会被加密传输,安全性得到了很大的提高。ssh使用十分简单,选择以什么用户连接哪台机器,然后输入密码即可:$ssh user@hostnameuser@hostname’s password:对称加密和非对称加密ssh的主要有点就是安全性,安全性依赖于加密方式,现在主要的加密方式有两种:对称加密和非对称加密。对称加密对称加密使用同一个密钥来进行加密和解密,这样在传输时是安全可靠的,但是如何安全的保存密钥呢,在集群中,客户端的数量巨大,一旦任意一个客户端的密钥被窃取,那么整个系统的安全性也不复存在。非对称加密由于对称加密的这个弊端,产生了非对称加密,非对称加密中有两个密钥:公钥和私钥。公钥由私钥产生,但却无法推算出私钥;公钥加密后的密文,只能通过对应的私钥来解密。非对称加密的登录流程:初始状态:topgun终端要登录Server服务器,发起连接请求ssh work@server.com服务端运行有ssh服务,并持续监听22号端口,因此可以生成一对公钥和私钥;此时将公钥返回给客户端客户端使用公钥,对登录密码进行加密,(如服务器work用户密码为xxx),生成公钥加密字符串客户端将公钥加密字符串发送给服务端服务端使用私钥,解密公钥加密字符串,得到原始密码校验密码是否合法(此为本机work密码)返回登录结果给客户端:成功登录或密码错误在非对称加密中,由于只有公钥会被传输,而私钥是服务端本地保存,因此即便公钥被监听,也无法拿到原始密码,从而登录服务器。中间人攻击在非对称加密中可以有效保护登录密码不被泄漏,但这是在建立连接到真实服务器的情况下。设想一下,如果供给者并不监听密码或公钥,而是直接伪装成服务器呢:在该示例图中,存在Hacker服务器劫持了你的ssh建连请求(如通过DNS劫持等方式),导致你与Hacker机器的连接一切正常,因此它能拿到你的明文密码,并通过明文密码来攻击真实的服务端。那么SSH采用了非对称的加密方式,是怎么解决这个问题的呢?[work@client.com: ]$ ssh work@server.comThe authenticity of host ‘server.com (10.10.10.24)’ can’t be established.RSA key fingerprint is ad:2e:92:41:6f:31:b1:c1:35:43:eb:df:f1:18:a1:c1.Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added ‘server.com,10.10.10.24’ (RSA) to the list of known hosts.Password: (enter password) 在这个认证信息中,可以看到提示:无法确认主机server.com (10.10.10.24)的真实性,不过知道它的公钥指纹,是否继续连接?输入yes继续连接后,就会确认该服务器为可信任服务器,然后添加到known_hosts文件中,下次不用再次确认,然后跳转到输入密码的验证阶段。这种简单粗暴的方式相当于让我们肉眼比对来判断目标服务器是否是真实服务器,我觉得并不是最理想的方式,希望后续会有更完美的认证方式。之所以用fingerprint(公钥指纹)代替key,主要是key过于长(RSA算法生成的公钥有1024位),很难直接比较。所以,对公钥进行hash生成一个128位的指纹,这样就方便比较了。SSH免密登录我们已经掌握如何使用ssh登录远程服务器了,但是每次登录都要输入密码,比较麻烦。ssh提供一种免密登录的方式:公钥登录。在客户端使用ssh-keygen生成一对密钥:公钥+私钥将客户端公钥追加到服务端的authorized_key文件中,完成公钥认证操作认证完成后,客户端向服务端发起登录请求,并传递公钥到服务端服务端检索authorized_key文件,确认该公钥是否存在如果存在该公钥,则生成随机数R,并用公钥来进行加密,生成公钥加密字符串pubKey(R)将公钥加密字符串传递给客户端客户端使用私钥解密公钥加密字符串,得到R服务端和客户端通信时会产生一个会话ID(sessionKey),用MD5对R和SessionKey进行加密,生成摘要(即MD5加密字符串)客户端将生成的MD5加密字符串传给服务端服务端同样生成MD5(R,SessionKey)加密字符串如果客户端传来的加密字符串等于服务端自身生成的加密字符串,则认证成功此时不用输入密码,即完成建连,可以开始远程执行shell命令了实现免密登录ssh-genkey是生成密钥的工具,执行完成后生成公钥和密钥,这两个文件会默认保存在/.ssh/路径下。常用的参数为:-t: 指定生成密钥类型(rsa、dsa)。默认为rsa-f: 指定存放私钥的文件,公钥文件名为私钥文件名加.pub后缀。默认为id_rsa-P: 指定passphrase(私钥的密码),用于确保私钥的安全。默认为空-C: 备注。默认为user@hostname我们直接执行来生成密钥,所有的参数都可以为空,也就是一直回车确认:$ ssh-keygenGenerating public/private rsa key pair.Enter file in which to save the key (/home/work/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in id_rsa.Your public key has been saved in id_rsa.pub.The key fingerprint is:74:17:74:38:b2:c7:70:fd:1d:33:eb:e2:71:71:cc:11 work@client.com此时,生成的文件在/.ssh/目录下,我们会看到这些文件:id_rsa // 私钥文件 id_rsa.pub // 公钥文件authorized_keys // 存放客户端公钥的文件known_hosts // 确认过公钥指纹的可信服务器列表的文件config // 指定不同域名使用哪个密钥的配置文件因为一台机器即能是客户端,又能是服务端,因此同时存在authorized_keys(在该机器为服务端时使用)和Known_hosts(在该机器为客户端时使用)。我们的服务器会有很多的用户,如果所有的用户都用同一份密钥,可能就没办法划分权限或者区分用户,如多个用户提交git就需要按照用户名来生成密钥,用于区分用户。同时你可能也希望针对不同的服务器使用不同的密钥对,因此需要config配置文件来配置针对不同服务器的配置:$vim ~/.ssh/configHost a.baidu.comUser workIdentityFile ~/.ssh/id_rsaHost b.baidu.comUser zhaoshuaiqiangIdentityFile ~/.ssh/zhaoshuaiqiang这样在连接不同的服务器时,就会使用不同的密钥文件来登录。在客户端生成密钥对之后,将公钥追加到服务器的authorized_keys文件中即可。 … 15 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAn30bjwtkLW82vTlLMQnI/a42J2g7o+HBCpSzBgNG+xfZuSNQOAU8+FNKQvriT4AL7ToiTtrZDLOEGqyQzaxQejuNnWG6aQ9ETh96qXhVLecWidaBieFGuv+F uXz6x551xtFXx64AzG+706dhnv1nOACYlrnfvXhi5kZzWzprET+CxMIeYhJQwwc19pF5zCWeU9QUvd1mOu0n8JVycevmuXRdVx9WpXq2+aaaaaaaa3uYGMBxvSLtT40O1AiEZ+k9EeYCnTEV tnGoVWCyxpwv6rR/GDOtJL/d+/Wb6I0HEKxxe087yZz8GWpQN5TEIAjq3oEjI/aiGw== work@a.baidu.com 16 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAzRmK+CAVLnryXqQwweu8Yji8bGAvqzf8PSDzYn1nmE6ZeDkBbrWvFlVZ2yOip3IX8RjvuPc28mTCr0LsIOOmpvET0SzOkt0hzLBPiyCN/QvbKU/RbUv8v5y2 hEAlbUkMEzv7qOHQEruGEvA5y99gf/nYjK5OFKVpmg838OScUV3i88Xbqk8rtcuRZHWuZLnuB5spBsEE5r1UrnH/Ik7frZr8Vb4X6aZWbAp1yc0SqZ8JXVbmOiakqq0WqkLm+zqhEwr+Ooh2guH23x9zjMqY Uy+aaaaaBEBC+LepCvskArBt/SRwJDJkcItz8T7kBC3CP0Y0X4hB+6k6/yM/pup5w== work@b.baidu.com此时,即可免密登录服务器。私钥的安全性假设你已经实现了服务器集群的免密登录,那么如果你的一台客户端被攻击成功了,那么整个集群的安全性便荡然无存了。因此,我们有时还需要对密钥做安全性保障,即设置私钥密码:// 使用rsa方法加密,生成test密钥对,私钥密码为123456ssh-keygen -t rsa -f test -P 123456 此时,各机器仍然是免密登录,但是需要你输入私钥密码:$ssh work@a.baidu.comEnter passphrase for key ‘/home/work/.ssh/test’: 参考资料RUNOOB-Linux scp命令:http://www.runoob.com/linux/l…linux-doc scp跨机远程拷贝:https://linuxtools-rst.readth…维基百科 Secure Shell:https://zh.wikipedia.org/wiki…简书 图解SSH原理:https://www.jianshu.com/p/334…CSDN scp在linux中实现两台主机传件–互信无需输入密码: https://blog.csdn.net/posonri… ...

February 27, 2019 · 1 min · jiezi