linux ipv4 php database asynchronous cakephp junit datatable ldap vue响应式 php项目实战 jquery去除空格 jquery拼接字符串 dplayer不能全屏 oracle分析函数 python安装配置 java入门新手教程 java开发接口 java对象和类 java如何连接mysql java目录 java的输入 java的安装 java的特性 linux用户 linux的find 战地联盟辅助 wow怎么赚钱 tomcat修改端口 苹果放大镜 光头强换肤助手 万能低格工具还原u盘 diskman 向日葵9 机箱最佳风道图 ae怎么复制图层 加字幕的软件 java下载文件 电子书籍下载 xinput
当前位置: 首页 > 学习教程  > 编程语言

使用scp上传文件到服务器或从服务器下载文件(支持跨越跳板机)

2020/8/31 14:07:57 文章标签:

转载 原文链接 原贴写的很好,我转载懒得排版了


scp是什么?
使用man scp可以看到scp的解释『scp — secure copy (remote file copy program)』,scp是一个安全拷贝工具,支持远程拷贝,它支持本地拷贝到本地(当然这个一般不会用它,直接用cp就行)、本地拷贝到远程(上传)、远程拷贝到本地(下载)、远程拷贝到远程。
scp是使用ssh通道来传输的,所以,linux服务器都是自带scp的,scp传输文件要输入密码的问题,可以通过设置ssh免密码登录即可解决。
实例演示
从本地拷贝到本地
从本地拷贝到本地一般人不会用它,因为没必要,直接用cp就行,这里只是作为演示:
把文件file1.txt拷贝到test2目录,注意两个文件都可以添加路径。
scp file1.txt test2
BashCopy
本地拷贝到远程(上传文件到服务器)
使用格式
scp 本地文件 远程服务器用户名@远程服务器IP:远程服务器目录
BashCopy
把file1.txt上传到远程服务器的/home/zhangsan目录中,远程服务器用户名为zhangsan,远程服务器ip为101.5.13.115:
scp file1.txt zhangsan@101.5.13.115:/home/zhangsan
BashCopy
可以用表示家目录(待同于/home/zhangsan):
scp file1.txt zhangsan@101.5.13.115:~
BashCopy
把file1.txt上传到远程服务器的/home/zhangsan目录中,并把上传后的文件重命名为testfile1.txt:
scp file1.txt zhangsan@101.5.13.115:/home/zhangsan/testfile1.txt
BashCopy
把newdir文件夹上传到远程服务器中(上传文件夹要加-r,注意-r的r是小写,r表示recursive,递归的意思)
scp -r newdir zhangsan@101.5.13.115:/home/zhangsan
BashCopy
指定服务器端口(scp默认端口为ssh的端口,即22,因为它的数据传输实际上是使用ssh的,其实跟安全有关的,都是用ssh的,比如sftp,它也是通过ssh来传的),注意端口使用-P指定,P是大写的,不是像ssh那样小写,在这里小写的P是preserve的意思,意思是保留文件原始信息(比如文件创建时间,文件修改时间,文件权限等等)。
scp -r -P 22 newdir zhangsan@101.5.13.115:/home/zhangsan
BashCopy
同时上传多个文件,一种方式是,把多个文件放到目录中,另一种是直接传多个文件(多个文件之间用空格隔开)
scp file1.txt file2.txt zhangsan@101.5.13.115:/home/zhangsan
BashCopy
使用正则表达式同时上传多个文件(用于文件名类似的文件)
scp file* zhangsan@101.5.13.115:/home/zhangsan
BashCopy
从远程拷贝到本地(从远程服务器下载文件)
其实很简单,只需要把从本地上传到远程服务器反过来即可,使用格式:
scp 远程服务器用户名@远程服务器IP:远程服务器文件绝对地址 本地文件
BashCopy
从远程服务器下载/home/zhangsan/file1.txt文件到本地当前目录./
scp zhangsan@101.5.13.115:/home/zhangsan/file1.txt ./
BashCopy
从远程服务器下载/home/zhangsan/file1.txt文件到本地当前目录./,并把下载的文件重命名为testfile1.txt:
scp zhangsan@101.5.13.115:/home/zhangsan/file1.txt ./testfile1.txt
BashCopy
从远程服务器下载文件夹,道理跟上传是一样的,只要加-r参数即可。如下例:把远程服务器的/home/zhangsan/newdir文件夹下载到当前目录中
scp -r zhangsan@101.5.13.115:/home/zhangsan/newdir ./
BashCopy
指定远程端口,跟上传一样,用-P(P大写)
scp -P 2232 zhangsan@101.5.13.115:/home/zhangsan/file1.txt ./
BashCopy
从远程服务器下载多个文件到本地,除了可以把文件都放到一个目录里下载目录之外,还可以用引号(单/双都可以)把远程文件引起来,里面的多个文件用空格隔开,当然文件必须写绝对路径,如把远程服务器中的/home/xiebruce/file1.txt /home/xiebruce/file2.txt两个文件下载到当前目录./:
scp zhangsan@101.5.13.115:’/home/xiebruce/file1.txt /home/xiebruce/file2.txt’ ./
BashCopy
使用正则从远程服务器下载多个文件到本地当前目录./(注意用到了正则,一定要用引号括起来,否则报错):
scp zhangsan@101.5.13.115:’/home/xiebruce/file*’ ./
BashCopy
远程拷贝到远程(两个远程服务器之间拷贝)
注意这里说的远程到远程,是指A、B是两台远程主机,我们可以通过scp,在不登录A,也不登录B的情况下,直接在你自己的电脑中使用scp命令,实现A拷贝到B,当然你也可以登录其中一台,这样的话,你登录的那台机就相当于上面说的”本地”了。因此,我们必须让A服务器登录到B服务器时免密码登录,设置方法:Linux-使用ssh免密码登录
scp xiebruce@123.7.12.110:/home/xiebruce/file1.txt xiebruce@11.96.13.35:/home/xiebruce
BashCopy
以上命令实现的原理,是scp把命令上传到A机器,然后在A机器中执行命令把A机器中的指定文件拷贝到B机器,所以,所谓的远程到远程,其实实质上是『本地到远程』,因为真正的命令是在A机器上执行,所以A就相当于本地,B相当于远程。
scp穿越跳板机
由于scp本身就是通过ssh通道来传输的,所以scp穿越跳板机的方式,与ssh完全相同,什么是跳板机、ssh如何穿越跳板机可以看这篇文章:ssh通过代理登录远程主机及穿越跳板机。
命令指定跳板机
scp穿越跳板机格式:
scp -o “ProxyJump 跳板机用户名@跳板机ip(或域名)” 要传送的文件绝对路径 目标机用户名@目标机ip:目标机的文件夹
BashCopy
以下命令,表示使用scp,通过跳板机10.37.129.5把本地文件/home/xiebruce/test.txt传送到实际要传送的目标机10.37.129.6的/home/xiebruce/目录中:
scp -o “ProxyJump xiebruce@10.37.129.5” /home/xiebruce/test.txt xiebruce@10.37.129.6:/home/xiebruce/
BashCopy
以下命令,与上边的命令刚好反过来,表示使用scp,通过跳板机10.37.129.5把远程服务器10.37.129.6中的/home/xiebruce/test.txt文件下载到本地的当前目录./中:
scp -o “ProxyJump xiebruce@10.37.129.5” xiebruce@10.37.129.6:/home/xiebruce/test.txt ./
BashCopy
配置文件指定跳板机
具体先去看看ssh通过代理登录远程主机及穿越跳板机中的配置文件指定方法,scp与ssh完全一样的。
在~/.ssh/config中添加以下语句(当然用户名和ip都要改成你的):

定义跳板机

Host jump
HostName 10.37.129.5
User xiebruce
Port 22

定义目标机

Host 10.37.129.6
HostName 10.37.129.6
# 表示通过jump这个跳板机来传送
ProxyJump jump
BashCopy
以下命令,是把本地的/home/xiebruce/test.txt文件通过跳板机10.37.129.5传到远程的10.37.129.6服务器中的/home/xiebruce/目录中:
scp /home/xiebruce/test.txt xiebruce@10.37.129.6:/home/xiebruce/
BashCopy
但是在命令里看不出使用了跳板机,那是因为在ssh的配置文件~/.ssh/config中定义了通过跳板机传送的配置。
反过来,把服务器的文件下载下来,也是一样的:
scp xiebruce@10.37.129.6:/home/xiebruce/test.txt ./
BashCopy
与前面的方法一样,你还可以用-P指定端口(当然这个端口是指A机器的端口),用-r指定拷贝目录,以及拷贝多个文件都可以用前面的方法。
免密码穿越跳板机
与ssh一样,只要满足“本地对跳板机ssh免密”及“本地对目标机ssh免密”,那么scp通过跳板机传送文件就能免密,而跳板机对目标机是不要求免密的。ssh免密配置方法请看:Linux-使用ssh免密码登录。


本文链接: http://www.dtmao.cc/news_show_150184.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?