在服务器管理和日常运维工作中,将本地文件安全、高效地传输到远程CentOS服务器是一项基础且关键的任务,文件传输协议(FTP)及其安全变体SFTP(SSH File Transfer Protocol)是实现这一目标最常用的两种手段,本文将详细介绍在CentOS环境下,如何使用命令行工具进行FTP和SFTP上传,涵盖从基础连接到高级操作的全过程,旨在为系统管理员和开发者提供一份清晰、实用的操作指南。
传统FTP命令的使用
尽管由于安全性问题,传统FTP(明文传输)在新系统部署中已不那么推荐,但许多遗留系统和特定场景仍在使用它,了解其命令行操作依然具有实际意义。
连接与登录
您需要确保CentOS系统已安装FTP客户端。ftp
客户端是默认安装的,如果没有,可以通过 yum install ftp
或 dnf install ftp
进行安装。
连接到FTP服务器的命令格式如下:
ftp [ftp服务器地址或域名]
连接到一个IP地址为 168.1.100
的FTP服务器:
ftp 192.168.1.100
连接成功后,服务器会提示您输入用户名(Name
)和密码(Password
),正确输入后,您会看到一个 ftp>
提示符,表示已成功登录。
基本导航与文件上传
在上传文件前,您需要确认远程服务器的当前目录和本地工作目录。
pwd
:查看远程服务器上的当前目录。ls
或dir
:列出远程当前目录下的文件和文件夹。cd [远程目录名]
:切换远程目录。lcd [本地目录名]
:切换本地目录(非常重要,确保您在本地找到了要上传的文件)。
准备就绪后,使用 put
命令上传单个文件:
put [本地文件名]
将本地的 report.txt
文件上传到远程服务器的当前目录:
put report.txt
如果需要上传多个文件,可以使用 mput
命令,并结合通配符:
mput [文件通配符]
上传所有 .log
文件:
mput *.log
执行 mput
时,系统会为每个文件询问是否确认上传(mput report.log?
),如果不想逐一确认,可以先关闭交互模式:
prompt
再次执行 prompt
命令可以重新开启交互模式。
传输模式设置
FTP有两种传输模式:ASCII(文本模式)和Binary(二进制模式),对于文本文件,ASCII模式会进行换行符转换;而对于图片、压缩包、可执行文件等,必须使用Binary模式,否则会导致文件损坏,为了避免出错,建议在登录后直接设置为Binary模式:
binary
操作完成后,使用 bye
或 quit
命令退出FTP会话。
安全的SFTP命令的使用
SFTP是基于SSH协议的文件传输程序,所有数据(包括认证信息)都经过加密,安全性远高于FTP,是目前的主流选择,几乎所有现代CentOS系统都默认支持SFTP。
连接与登录
SFTP的连接方式与SSH类似:
sftp [用户名]@[sftp服务器地址或域名]
以用户 admin
的身份连接到服务器 168.1.100
:
sftp admin@192.168.1.100
系统会提示您输入 admin
用户的密码(或使用SSH密钥认证),成功后,您将看到 sftp>
提示符。
本地与远程命令的区别
SFTP的一个核心特点是明确区分本地操作和远程操作,这通过在命令前添加 l
(local)来实现。
- 远程操作:
pwd
,ls
,cd [远程目录]
- 本地操作:
lpwd
,lls
,lcd [本地目录]
查看本地当前目录:
lpwd
切换到本地的 /home/user/documents
目录:
lcd /home/user/documents
文件与目录上传
SFTP中的上传命令同样是 put
。
put [本地文件名] [远程文件名可选]
上传本地的 backup.tar.gz
到远程当前目录:
put backup.tar.gz
SFTP的 put
命令也支持通配符,可以直接上传多个文件,无需 mput
或 prompt
设置:
put *.sql
一个SFTP的显著优势是能够直接上传整个目录及其内容,使用 -r
(recursive) 参数:
put -r [本地目录名]
将本地的 project_folder
整个上传到远程服务器:
put -r project_folder
操作完成后,使用 exit
或 bye
退出SFTP会话。
命令对比与小编总结
为了更清晰地对比两种方式的常用命令,下表进行了小编总结:
功能 | FTP 命令 | SFTP 命令 |
---|---|---|
连接服务器 | ftp [host] | sftp [user]@[host] |
查看远程目录 | pwd , ls | pwd , ls |
查看本地目录 | !pwd , !ls (不常用) | lpwd , lls |
切换远程目录 | cd [remote_dir] | cd [remote_dir] |
切换本地目录 | lcd [local_dir] | lcd [local_dir] |
上传单个文件 | put [local_file] | put [local_file] |
上传多个文件 | mput [files] | put [files] |
上传整个目录 | 不支持(需打包或逐个上传) | put -r [local_dir] |
设置传输模式 | binary 或 ascii | 自动处理,通常无需设置 |
退出 | bye , quit | exit , bye |
自动化脚本中的FTP/SFTP
在自动化任务(如定时备份)中,交互式登录和输入密码是不可行的。
- FTP自动化:可以使用
.netrc
文件存储凭据,或通过shell脚本中的“Here Document”提供输入。 - SFTP自动化:更推荐使用批处理模式,将所有SFTP命令写在一个文件(如
sftp_commands.txt
)中,然后使用-b
选项执行:sftp -b sftp_commands.txt admin@192.168.1.100
结合SSH密钥认证,可以实现完全无密码的自动化安全传输。
相关问答FAQs
使用FTP上传文件时,系统返回“550 Permission denied”错误,是什么原因?如何解决?
解答: 这个错误意味着您没有向目标目录写入文件的权限,这通常由两个原因导致:1)您登录的FTP用户本身对该目录没有写入权限,2)该目录在服务器文件系统上的权限设置不允许写入,您需要联系服务器管理员,确认FTP用户的权限,并检查目标目录的权限设置(使用 ls -ld /path/to/directory
命令查看),确保FTP用户所属组或用户本人拥有 w
(write) 权限。
如何使用SFTP上传一个完整的目录,并保持其原有的目录结构?
解答: SFTP提供了一个非常方便的 -r
(recursive) 参数来递归上传整个目录,您只需在 put
命令前加上 -r
即可,命令格式为 put -r [本地目录名]
,要将本地的 my_app
目录及其所有子目录和文件上传到服务器的当前目录,只需在SFTP会话中执行 put -r my_app
,SFTP会自动在远程服务器上创建同名的目录结构。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复