概述
scp
是 secure copy的缩写,scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。linux的scp命令可以在linux服务器之间复制文件和目录。
因此我们可以用于写一个脚本在一台服务器上来向多台服务器发送文件部署代码。
语法
scp
的基本语法是:scp [选项] [参数]
。
常用选项如下:
选项 | 说明 |
---|---|
-1 | 使用ssh协议版本1-2 |
-2 | 使用ssh协议版本2 |
-4 | 使用ipv4 |
-6 | 使用ipv6 |
-B | 以批处理模式运行 |
-C | 使用压缩 |
-F | 指定ssh配置文件 |
-l | 指定宽带限制 |
-o | 指定使用的ssh选项 |
-P | 指定远程主机的端口号,如果默认 SSH 端口不是 22,则使用此选项指定 SSH 端口。 |
-p | 保留文件的最后修改时间,最后访问时间和权限模式 |
-q | 不显示复制进度 |
-r | 以递归方式复制,可用于复制目录 |
使用
从远程复制文件到本地
从远程服务器复制指定文件到本地主机的指定目录下,基本语法格式如下:
scp user@ip:/path/to/remote/file /path/to/local/directory
参数说明:
user@ip:
:指的是用户名和远程服务器的IP地址,如root@192.168.3.5
。注意,用户名和服务器IP地址都是远程服务器的而不是本地服务器的。注意:
冒号是必须的。/path/to/remote/file
:指的是远程服务器上你想要复制的文件,如/root/.ssh/restart.sh
。/path/to/local/directory
:指的是将远程服务器上的文件复制到本地后存放在哪个目录,如/root/home
。
例如,将远程服务器上的/root/test.txt
文件复制到本地服务器上的/root/.ssh
目录下注意,需要输入远程服务器指定用户的密码。
scp root@192.168.40.90:/root/test.txt /root/.ssh
从远程复制目录到本地
从远程服务器复制指定目录到本地主机的指定目录下,基本语法格式如下:
scp -r user@ip:/path/to/remote/directory /path/to/local/directory
参数说明:
-r
:是一个选项,表示以递归的方式复制,复制目录的时候使用。user@ip:
:指的是用户名和远程服务器的IP地址,如root@192.168.3.5
。注意,用户名和服务器IP地址都是远程服务器的而不是本地服务器的。注意:
冒号是必须的。/path/to/remote/directory
:指的是远程服务器上你想要复制的目录。/path/to/local/directory
:指的是将远程服务器上的目录复制到本地后存放在哪个目录下,如/root/home
。
例如,将远程服务器上的/root/.ssh/
文件夹复制到本地服务器上的/root/home
目录下,注意,需要输入远程服务器指定用户的密码。
scp -r root@192.168.40.90:/root/.ssh /root/home
上传本地文件到远程
可以将本地服务器上的指定文件上传到远程服务器上的指定目录下,语法如下:
scp /path/to/local/file user@ip:/path/to/remote/directory
参数说明:
user@ip:
:指的是用户名和远程服务器的IP地址,如root@192.168.3.5
。注意,用户名和服务器IP地址都是远程服务器的而不是本地服务器的。注意:
冒号是必须的。/path/to/local/file
:指的是本地服务器待上传的文件,如/root/.ssh/local.txt
。/path/to/remote/directory
:指的是将本地服务器上的文件上传后存放在哪个目录,如/root/home
。
例如,将本地服务器上的/root/.ssh/local.txt
文件上传到192.168.40.90
这台远程服务器上的/root/home
目录下。注意,需要输入远程服务器指定用户的密码。
scp /root/.ssh/local.txt root@192.168.40.90:/root/home
上传本地目录到远程
可以将本地服务器上的指定文件上传到远程服务器上的指定目录下,语法如下:
scp -r /path/to/local/directory user@ip:/path/to/remote/directory
参数说明:
-r
:是一个选项,表示以递归的方式复制,复制目录的时候使用。user@ip:
:指的是用户名和远程服务器的IP地址,如root@192.168.3.5
。注意,用户名和服务器IP地址都是远程服务器的而不是本地服务器的。注意:
冒号是必须的。/path/to/remote/directory
:指的是远程服务器上你想要复制的目录。/path/to/local/directory
:指的是将远程服务器上的目录复制到本地后存放在哪个目录下,如/root/home
。
例如,将本地服务器上的/root/.ssh
文件夹上传到远程服务器,放在/root/home
目录下,注意,需要输入远程服务器指定用户的密码。
scp -r /root/.ssh/ root@192.168.40.90:/root/home
拓展延申
无论是从远程服务器上复制文件目录到本地,还是从本地服务器上传文件目录到远程服务器,每一次连接都需要输入远程服务器的密码,这很麻烦。所以我们可以让两台服务器建立信任关系,从此scp
操作就不需要输入密码了,具体如何操作请参考:让两台甚至多台Linux服务器建立SSH信任关系。