从主机传文件到服务器scp
一、SCP命令
SCP(Secure Copy Protocol)是一种基于SSH(Secure Shell)协议的安全文件传输命令,用于在本地计算机和远程服务器之间安全地复制文件和目录,由于其使用SSH进行数据传输,SCP提供了与SSH相同的安全性,包括数据加密和用户认证,这使得SCP成为系统管理员和需要在不同系统间迅速安全传输文件的用户的首选工具之一。
二、基本用法
1. 上传文件到服务器
scp /local_path/filename username@servername:/server_path
解释:此命令将本地的/local_path/filename
文件上传到服务器上的/server_path
路径,你需要将username
替换为服务器上的用户名,servername
替换为服务器的主机名或IP地址。
示例:
scp /home/user/document.txt root@192.168.1.100:/var/www/html
此命令将本地的document.txt
文件上传到服务器192.168.1.100
上的/var/www/html
目录。
2. 下载文件到本地
scp username@servername:/server_path/filename /local_path
解释:此命令将从服务器上的/server_path/filename
路径下载文件到本地的/local_path
路径。
示例:
scp root@192.168.1.100:/var/www/html/index.html /home/user/Downloads
此命令将从服务器192.168.1.100
上的/var/www/html/index.html
文件下载到本地的Downloads
目录。
3. 递归上传整个目录到服务器
scp -r /local_path/dirname username@servername:/server_path
解释:参数-r
表示递归传输目录及其内容,此命令将本地的/local_path/dirname
目录上传到服务器上的/server_path
路径。
示例:
scp -r /home/user/pictures root@192.168.1.100:/var/www/html/photos
此命令将本地的pictures
目录上传到服务器192.168.1.100
上的/var/www/html/photos
目录。
4. 递归下载整个目录到本地
scp -r username@servername:/server_path/dirname /local_path
解释:此命令将从服务器上的/server_path/dirname
路径递归下载整个目录到本地的/local_path
路径。
示例:
scp -r root@192.168.1.100:/var/www/html/css /home/user/Downloads
此命令将从服务器192.168.1.100
上的/var/www/html/css
目录递归下载到本地的Downloads
目录。
5. 指定端口号进行传输
scp -P port_number /local_path/filename username@servername:/server_path
解释:参数-P
用于指定SSH连接的端口号,如果服务器的SSH端口不是默认的22,而是2222,则可以使用此参数指定。
示例:
scp -P 2222 /home/user/document.txt root@192.168.1.100:/var/www/html
此命令通过端口2222将本地的document.txt
文件上传到服务器192.168.1.100
上的/var/www/html
目录。
三、高级用法
1. 启用压缩功能
scp -C /local_path/filename username@servername:/server_path
解释:参数-C
用于启用压缩功能,在传输过程中,数据会被临时压缩,以减少网络上的数据传输量,从而可能加快文件传输速度,特别是在带宽有限或传输大文件时。
示例:
scp -C -P 2222 /home/user/largefile.zip root@192.168.1.100:/var/www/html
此命令通过端口2222启用压缩功能,将本地的largefile.zip
文件上传到服务器192.168.1.100
上的/var/www/html
目录。
2. 保留文件的修改时间和访问时间
scp -p /local_path/filename username@servername:/server_path
解释:参数-p
用于保留原文件的修改时间和访问时间,这对于需要保持文件元数据一致性的场景非常有用。
示例:
scp -p /home/user/photo.jpg root@192.168.1.100:/var/www/html/images
此命令将本地的photo.jpg
文件上传到服务器192.168.1.100
上的/var/www/html/images
目录,并保留文件的修改时间和访问时间。
3. 详细模式显示传输信息
scp -v /local_path/filename username@servername:/server_path
解释:参数-v
用于启用详细模式,显示详细的传输信息,包括每个文件的传输进度、速度等,这对于调试和监控传输过程非常有用。
示例:
scp -v /home/user/document.txt root@192.168.1.100:/var/www/html
此命令将本地的document.txt
文件上传到服务器192.168.1.100
上的/var/www/html
目录,并显示详细的传输信息。
四、常见问题及解答 (FAQs)
Q1: SCP命令提示“Permission denied (publickey)”怎么办?
A1: 这个错误通常意味着SCP无法通过密钥认证来登录远程服务器,解决方法如下:
1、确保你已经生成了SSH密钥对,并且公钥已经添加到远程服务器的~/.ssh/authorized_keys
文件中。
2、确保你的私钥文件具有正确的权限(只有你本人可以读写):chmod 600 ~/.ssh/id_rsa
。
3、确保远程服务器的SSH配置允许密钥认证,你可以编辑/etc/ssh/sshd_config
文件,确保以下行没有被注释或设置为yes
:
RSAAuthentication yes PubkeyAuthentication yes
4、如果问题依旧存在,可以尝试使用密码认证方式(不推荐用于生产环境),或者检查网络连接和防火墙设置。
Q2: 如何通过SCP传输文件夹但排除某些子文件夹或文件?
A2: SCP本身不直接支持排除某些子文件夹或文件的功能,但你可以通过结合使用其他命令来实现这一需求,你可以使用tar
命令在本地创建归档文件时排除不需要的文件或文件夹,然后再使用SCP传输该归档文件到远程服务器,下面是一个示例:
1、在本地创建一个排除了指定文件或文件夹的归档文件:
tar --exclude='./exclude_this_folder' -czvf archive_name.tar.gz /local_path
2、使用SCP传输归档文件到远程服务器:
scp archive_name.tar.gz username@servername:/remote_path
3、在远程服务器上解压归档文件:
ssh username@servername 'cd /remote_path && tar xzvf archive_name.tar.gz'
这种方法虽然可以实现排除功能,但需要在远程服务器上解压归档文件,这可能会增加一些额外的步骤和复杂性,如果你经常需要传输大量文件并排除某些子文件夹或文件,可能需要考虑使用更专业的文件同步工具或脚本来简化这一过程。
最新评论
本站CDN与莫名CDN同款、亚太CDN、速度还不错,值得推荐。
感谢推荐我们公司产品、有什么活动会第一时间公布!
我在用这类站群服务器、还可以. 用很多年了。