目录
- [1 scp命令](#1 scp命令)
-
- 1.1简介
- 1.2命令说明
- [1.3 实例](#1.3 实例)
-
- 1、从本地复制的远程
- 2、从远程复制到本地
- 3、-r:复制目录
- [4、 -p:保留原文件的修改时间,访问时间](#4、 -p:保留原文件的修改时间,访问时间)
- 5、-P:指定传输数据的端口
- 6、扩展:修改ssh默认端口
1 scp命令
1.1简介
scp 是 secure copy 的缩写, scp 是一个基于ssh协议实现不同Linux服务器之间的文件和目录拷贝的命令。
scp命令是基于rcp命令的
SCP命令会对所有传输的数据进行加密,以保障数据传输的安全性。
在使用SCP命令进行文件传输时,需要指定源文件的位置,目标服务器的IP地址以及目标路径。如果需要传输整个文件夹,还需要额外添加参数-r进行递归操作。同时,目标服务器会要求进行身份验证,验证通过后,文件传输才会开始。
1.2命令说明
使用:scp [-346ABCOpqRrsTv] [-c cipher] [-D sftp_server_path] [-F ssh_config]
[-i identity_file] [-J destination] [-l limit] [-o ssh_option]
[-P port] [-S program] source ... target
常用参数:
- -4:scp时只能使用IPv4地址
- -6:scp时只能使用IPv6地址
- -B:选择批处理模式(禁止询问密码或密码短语)。
- -C:允许压缩,将文件在传输过程中进行压缩,以节省传输时间和带宽
- -s:使用SFTP协议而不是scp协议
- -D sftp_server_path:在使用-s指定的协议时,连接到本地SFTP服务器地址
- -F ssh_config: 指定一个替代的ssh配置文件,此参数直接传递给ssh
- -i identify_file:选择从中读取用于公钥身份验证的身份(私钥)的文件
- -o ssh_ssh_option:用于向ssh传递选项,如:IdentityFile
- -P port:用于指定传输端口,如果ssh的端口改变,需要在此处指定
- -p:保留原文件的修改时间,访问时间
- -q:不显示传输进度条
- -r:递归复制整个目录
1.3 实例
1、从本地复制的远程
bash
# scp localfile remote_ip:remote_dir
scp a1 192.168.92.100:/root
# scp localfile remote_ip:remote_file
# 在复制的同时还修改了文件名
# 远程服务器有同名文件时会覆盖
scp a1 192.168.92.100:/root/aaa
# scp localfile remote_user@remote_ip:remote_file
scp a1 root@192.168.92.100:/root
# scp localfile remote_hostname:remote_file
scp a1 com01:/root/yyy
# 下面的远程服务器
root@com01:~# ll a1 aaa sss yyy
-rw-r--r-- 1 root root 82 Feb 21 09:27 a1
-rw-r--r-- 1 root root 82 Feb 21 09:25 aaa
-rw-r--r-- 1 root root 82 Feb 21 09:29 sss
-rw-r--r-- 1 root root 82 Feb 21 09:34 yyy
注意:
- 1.远程复制时有同名文件时会覆盖
- 2.在向远程服务器复制文件时,如果不指定远程用户名,默认会传输给当前用户名相同的用户
- 3.向指定目标地址时,既可以是目标服务器的IP也可以主机名
2、从远程复制到本地
从远程服务器复制本地只需要把目标地址和源地址修改一下即可
bash
# 复制到本地目录下
scp con01:/root/a1 .
scp con01:/root/a1 ./df
3、-r:复制目录
bash
######### 本地服务器
root@con01:~# ls haproxy-2.8.5
addons CHANGELOG examples LICENSE reg-tests tests
admin CONTRIBUTING haproxy MAINTAINERS scripts VERDATE
BRANCHES dev include Makefile src VERSION
BSDmakefile doc INSTALL README SUBVE
scp -r haproxy-2.8.5 com01:/root/
scp -r haproxy-2.8.5/ com01:/root/
# 以上两种写法都可
# 如果不加 -r 选项会报错:haproxy-2.8.5: not a regular file
#######远程服务器
root@com01:~# ls haproxy-2.8.5/
addons CHANGELOG examples LICENSE reg-tests tests
admin CONTRIBUTING haproxy MAINTAINERS scripts VERDATE
BRANCHES dev include Makefile src VERSION
BSDmakefile doc INSTALL README SUBVERS
root@com01:~#
4、 -p:保留原文件的修改时间,访问时间
bash
####### 本地服务器
root@con01:~# stat b1
File: b1
Size: 6 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 786447 Links: 1
Access: (0600/-rw-------) Uid: ( 1000/ smile) Gid: ( 1000/ smile)
Access: 2024-02-21 09:48:28.317809644 +0000
Modify: 2024-02-21 09:46:29.587905113 +0000
Change: 2024-02-21 09:47:42.221070217 +0000
Birth: 2024-02-21 09:46:29.587905113 +0000
scp b1 com01:/root/
scp -p b1 com01:/root/bb
# 从下面的内容可以看出保留原文件的修改时间,访问时间
####### 远程服务器
root@com01:~# stat b1
File: b1
Size: 6 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 788380 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2024-02-21 09:52:37.981073498 +0000
Modify: 2024-02-21 09:52:37.981073498 +0000
Change: 2024-02-21 09:52:37.981073498 +0000
Birth: 2024-02-21 09:52:37.981073498 +0000
root@com01:~# stat bb
File: bb
Size: 6 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 788381 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2024-02-21 09:48:28.000000000 +0000
Modify: 2024-02-21 09:46:29.000000000 +0000
Change: 2024-02-21 09:52:46.465445105 +0000
Birth: 2024-02-21 09:52:46.449444403 +0000
root@com01:~#
如果不清楚stat命令可以参考我的这篇文章:Linux命令:stat命令
5、-P:指定传输数据的端口
bash
scp -P 13222 b1 com01:/root/bb
# 这个主要是ssh的端口,如果ssh端口改变了,此处访问会改变
6、扩展:修改ssh默认端口
bash
# 修改ssh的配置文件,并重启即可
vim /etc/ssh/sshd_config
# 修改sftp上传文件端口
Port 13222