要在Linux服务器上连接并访问另一台服务器上的文件,核心思路是使用SSH远程登录或通过SCP/RSYNC同步,以及挂载远程目录,具体方式取决于你想要的是一时操作还是持续在线访问。 本文直接给你可执行的命令和判断标准,读完就能上手。
Linux服务器怎么连接另一个服务器:SSH登录与文件访问
最基础的需求是“人”连上去操作,而不是只拿文件,业内共识是,Linux服务器之间所有安全的远程管理都建立在SSH之上,你只需要知道对端IP、用户名和密码或密钥,就能像坐在那台机器面前一样查看、编辑、下载文件。
用SSH登录查看远程文件
SSH命令本身不提供可视化文件管理器,但你可以用它执行查看文件列表的命令:
ssh user@192.168.1.100 "ls -l /data/files"
这条命令会直接列出远程服务器上/data/files目录的详细内容,如果你希望像本地一样交互式操作,直接登录:
ssh user@192.168.1.100
登录后就可以使用cd、cat、tail等普通命令读取文件内容,这种方式适合临时查看日志、确认文件名,不适合大文件传输。
用SFTP进行类似FTP的安全文件操作
SFTP是SSH自带的文件传输协议,不需要额外装FTP服务端,登录后支持ls、get、put、rm等命令,操作方式接近传统FTP:
sftp user@192.168.1.100 get /data/files/app.log /local/logs/
这个场景下,你想“连接另一个服务器上的文件”,本质就是通过SFTP会话建立一条加密通道,把远程文件拉到本地,相比SCP,SFTP还能浏览远程目录、断点续传,更适合交互式逐个文件操作。
Linux服务器之间传输文件:SCP与RSYNC命令对比
如果你已经知道具体文件路径,直接一次性复制是最快的,这里要解决的是“linux服务器之间传输文件用什么命令”的典型疑问,两条命令各有脾气,别选错。
SCP:简单直接的单次复制
SCP基于SSH,适合小批量文件,基本写法:
# 从本地推到远程 scp /local/file.txt user@192.168.1.100:/data/ # 从远程拉到本地 scp user@192.168.1.100:/data/file.txt /local/ # 复制整个目录加上 -r scp -r /local/dir user@192.168.1.100:/data/
优点是没有学习成本,命令格式和cp几乎一样,缺点是不支持增量同步,每次都会完整覆盖目标文件,如果目标文件很大,重复传输浪费带宽和等待时间。
RSYNC:增量同步的大哥
当需要定期同步大量数据时,RSYNC比SCP高效得多,它只传输差异部分,还能保留权限、时间戳,通过SSH隧道使用时,命令和SCP相似:
# 同步到远程 rsync -avz /local/dir/ user@192.168.1.100:/remote/dir/ # 从远程拉取 rsync -avz user@192.168.1.100:/remote/dir/ /local/dir/
参数说明:
-a:归档模式,保留权限、软链接等属性-v:显示传输细节-z:传输时压缩,适合文本类文件
这里有个关键差异点:SCP是“复制”,RSYNC是“同步”,如果目标目录已有同名旧文件,RSYNC只更新发生变化的部分,而SCP无条件覆盖,频繁同步备份场景,选RSYNC;一次性分发几个配置文件,SCP更顺手。
两者对比表
| 对比项 | SCP | RSYNC |
|---|---|---|
| 传输机制 | 全量复制 | 增量同步 |
| 断点续传 | 不支持 | 支持(部分版本) |
| 保留权限 | 需要额外参数 | 默认支持 |
| 适合场景 | 单次小文件 | 定期大目录 |
| 命令复杂度 | 简单 | 稍复杂 |
将远程文件系统挂载到本地:SSHFS用法
上述命令都是一次性操作,如果业务要求像访问本地目录一样持续读取远程文件,那就得用SSHFS,它通过FUSE内核模块把远程目录“挂载”到本地目录下,实现透明访问。
安装与挂载步骤
以Ubuntu/Debian为例,安装:
apt install sshfs
CentOS/RHEL使用:
yum install sshfs
挂载操作:
mkdir -p /mnt/remote_data sshfs user@192.168.1.100:/data /mnt/remote_data
执行后,本地路径/mnt/remote_data下的所有操作都会直接命中远程服务器的/data目录,这时再执行ls、cat、vim,感觉和操作本地文件没有区别。
卸载远程挂载
fusermount -u /mnt/remote_data
这种“linux服务器挂载远程目录”方案尤其适合多台服务器共享一份配置、日志集中读取等场景,但它依赖网络稳定性,网络抖动时本地进程可能会短暂卡住,我的建议是:高并发读取场景不要用它,改用NFS;个人运维、临时排障时非常好用。
开机自动挂载配置
如果需要重启后自动连上,可以把挂载信息写入/etc/fstab:
user@192.168.1.100:/data /mnt/remote_data fuse.sshfs defaults,allow_other 0 0
注意:自动挂载要求配置SSH免密登录,否则开机时系统会卡在密码输入界面,用SSH密钥登录是最稳妥的做法。
多服务器管理场景下的连接与文件同步技巧
现实中你遇到的困境往往是服务器数量多了,每台都手动敲SCP太慢,这里给出几个实用经验,覆盖“linux远程连接怎么连接多台机器”这类痛点。
用跳板机实现间接文件访问
生产环境中,堡垒机(跳板机)往往是唯一入口,你无法直接SSH到内网服务器,但可以通过跳板机中转:
ssh -J user@跳板机 user@目标服务器
SCP也支持通过跳板机转发:
scp -o ProxyJump=user@跳板机 /local/file user@目标服务器:/data/
这样就不用先传到跳板机再二次转发了,省掉一步临时存储。
批量分发文件的Shell脚本
当有十几台服务器需要同步同一个配置文件时,可以用一个简单的for循环配合SSH密钥实现:
for ip in 192.168.1.101 192.168.1.102 192.168.1.103; do scp /etc/nginx/nginx.conf root@$ip:/etc/nginx/ ssh root@$ip "nginx -t && systemctl reload nginx" done
这种写法比逐台登录手动操作效率高很多,需要注意的是,批量操作前务必确保SSH免密登录已经配置好,否则脚本会因为等待密码输入而卡住。
使用Ansible简化文件分发
如果你所在的团队已经有自动化运维工具,Ansible的copy模块比手写循环更安全:
ansible web_servers -m copy -a "src=/local/app.conf dest=/etc/app.conf mode=0644"
这个命令会把本地文件一次性分发到web_servers分组的所有机器上,相比SCP循环,Ansible自带失败重试和结果汇总,适合变更频繁的正式环境。
连接另一个文件的核心原则
无论选择SCP、RSYNC还是SSHFS,都要先想清楚你的使用频率和文件大小,不定时传几个配置文件,SCP足够;每天备份日志,RSYNC是正解;需要持续读写远程目录,SSHFS能帮你省掉大量重复传输,行业共识是:不要为了炫技选择复杂方案,一个命令能解决的别引一套工具。
关于Linux服务器连接另一个文件或服务器的常见问题
Q1:连接另一个服务器时需要开放哪些端口?
SSH、SCP、SFTP、RSYNC-over-SSH都只需要远程服务器的TCP 22端口可达即可,SSHFS同样走SSH,也只需22端口,如果用RSYNC的daemon模式,才需要额外打开873端口,但生产环境建议优先用SSH通道,少暴露端口更安全。
Q2:为什么我执行SCP提示“Permission denied”?
这个提示通常不是文件权限问题,而是登录账号对目标路径没有写权限,检查三点:一是SSH登录用户是否正确;二是远程目录的属主和写权限,ls -ld查看;三是SELinux是否拦截了sshd的写操作,临时执行getenforce确认状态,多数情况下,换成对目标目录有写权限的用户就能解决。
Q3:如何免密自动连接另一台服务器做定时文件同步?
先使用ssh-keygen生成密钥对,然后用ssh-copy-id user@远程IP把公钥装到目标机器上,之后无论是SCP还是RSYNC都不再需要密码,定时同步任务写入crontab,例如每天凌晨两点:
0 2 rsync -avz /data user@192.168.1.100:/backup/ >> /var/log/rsync.log 2>&1
密钥生成后要注意私钥文件权限,chmod 600 ~/.ssh/id_rsa,否则SSH会拒绝加载,这一步做完,整个连接过程就不再依赖人工输入密码,逻辑上完全自动化。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/732120.html




