服务器运维必学:SCP 远程拷贝与 SSH 免密登录终极指南(附原理 + 实战)

        家人们!还在为跨服务器传文件反复输密码感到崩溃吗?还在为集群搭建时的登录认证问题抓耳挠腮吗?今天飞哥带来两个「运维神技能」——scp远程拷贝SSH 密钥对免密登录,直接把服务器操作效率拉满,让你从此告别手动输入密码的痛苦!全程干货 + 人话讲解,新手也能轻松拿捏,建议收藏后跟着实操~

一、scp 远程拷贝:跨服务器文件传输的「魔法指令」

1. scp 是什么?比 U 盘更酷的跨机传输

想象一下:你在本地写好的代码,想传到远程服务器,不用 U 盘插拔,不用 FTP 工具繁琐操作,更不用压缩后发邮件 —— 只需一条命令,文件就能「瞬间移动」到目标服务器!
scp(Secure Copy)就是基于 SSH 协议的加密传输工具,专门解决跨服务器文件传输问题,支持本地与远程、远程与远程之间的文件 / 文件夹互传,而且全程加密,安全又高效,堪称程序员的「跨机复制粘贴」神器!

2. 3 大核心场景 + 保姆级命令演示

📤 场景 1:本地文件 / 文件夹→远程服务器(上传)
# 单文件上传(把本地hosts文件传到bigdata01的/etc/目录)  
scp /etc/hosts root@bigdata01:/etc/  
# 执行后输入远程服务器密码,等待进度条跑完即可,传输过程清晰可见!  

# 文件夹上传(必加 `-r` 参数,否则会报错!)  
scp -r /opt/modules root@bigdata01:/opt/  

💡 记忆口诀:传文件像本地cp,传文件夹加 -rr代表递归传输,文件夹内容层层复制)。

📥 场景 2:远程服务器→本地(下载)
# 下载远程服务器的网卡配置文件到当前目录(后续修改配置超方便!)  
scp root@bigdata01:/etc/sysconfig/network-scripts/ifcfg-ens33 ./  
# 下载整个日志目录到本地备份(加 `-r` 递归下载)  
scp -r root@bigdata01:/var/log ./log_backup  

💡 实用技巧:下载后用 ls 命令查看当前目录,文件 / 文件夹秒级到位!

🌐 场景 3:远程服务器→远程服务器(A→B)
scp root@bigdata01:/etc/hosts root@bigdata02:/etc/  
# 原理:先从A服务器下载到本地中转,再上传到B服务器,需输入两次密码  

💡 进阶操作:如果 A 和 B 服务器在同一网络,可通过 -3 参数指定中转主机(适合资深运维,新手先掌握基础即可)。

3. 高阶玩法:让你快人一步的「偷懒技巧」

✅ IP 地址直连:专治主机名解析失败

如果遇到「无法解析主机名」的报错(比如bigdata02找不到),直接用 IP 地址代替,简单粗暴零失误:

scp /etc/hosts root@192.168.32.128:/etc/  
# 先用 `ifconfig` 或 `ip addr` 查看目标服务器IP,复制粘贴即可!  
✅ $PWD 路径魔法:少打一半字的懒人福音

先进入本地目标目录,再用 $PWD 自动填充当前路径,告别冗长路径输入:

cd /etc/  
scp hosts root@bigdata01:$PWD  
# 等价于 `scp /etc/hosts root@bigdata01:/etc/`,但输入量直接减半!  

💡 原理$PWD 是 Linux 内置变量,会自动替换为当前工作目录(比如 /etc),敲命令更丝滑~

✅ 指定 SSH 端口:非 22 端口服务器必备

如果远程服务器修改了 SSH 端口(比如改为 2222),加 -P 参数指定端口(注意大写!):

scp -P 2222 /etc/hosts root@192.168.32.128:/etc/  
# 端口号紧跟 `-P`,无需空格,例:`-P2222` 或 `-P 2222` 都正确  

4. 避坑指南:99% 的人会踩的 3 个坑

❌ 坑 1:传文件夹忘记加 -r,报错「Not a directory」

💥 原因:scp 默认只传文件,文件夹需显式声明递归传输
✅ 解决:永远记住「文件夹传输必带 -r」,养成习惯:

scp -r my_project root@server:/var/www/  
❌ 坑 2:主机名无法识别,提示「unknow host」

💥 原因:本地或远程服务器的 /etc/hosts 未配置 IP 映射
✅ 解决:

vi /etc/hosts  
# 添加一行:192.168.32.129 bigdata02 (IP和主机名一一对应,多个服务器用空格分隔)  
❌ 坑 3:远程目录权限不足,无法写入

💥 原因:普通用户对系统目录(如 /etc)无写入权限
✅ 解决:

  • 用 root 用户传输:scp file root@server:path
  • 或在远程服务器用 sudo 提升权限:ssh server 'sudo mv file /target/path'
  • 二、SSH 免密登录:让服务器之间「无缝互访」的魔法钥匙

    1. 为什么必须掌握?集群部署的「核心刚需」

    当你搭建 Hadoop、Kafka 等分布式集群时,主节点需要无密码访问所有从节点,否则每次启动都要手动输入密码,效率极低!SSH 免密登录通过密钥对认证,让服务器之间「自由串门」,是自动化部署和集群管理的必备技能。

    2. 手把手教学:3 步实现单向免密(bigdata01→bigdata02)

  • ① 生成密钥对(在发起方 bigdata01 上操作)
  • ssh-keygen -t rsa  
    # 一路按回车,使用默认路径和密码(密钥生成到 /root/.ssh/ 目录):  
    # ✔️ id_rsa:私钥(相当于你的私人钥匙,绝对不能泄露!)  
    # ✔️ id_rsa.pub:公钥(相当于门锁的备用钥匙,可以安全地交给目标服务器)  

    💡 灵魂提问:为什么需要两个文件?
    👉 公钥和私钥是「加密解密搭档」:公钥加密的内容只能用对应的私钥解密,反之亦然,利用这种特性实现安全认证。

  • ② 传输公钥到目标服务器(bigdata02)
  • ssh-copy-id bigdata02  
    # 输入bigdata02的root密码后,工具会自动将公钥追加到:  
    # /root/.ssh/authorized_keys (目标服务器的「信任名单」文件)  

    💡 底层操作:无需手动复制粘贴,一条命令搞定,比手动编辑文件更安全高效!

  • ③ 验证免密登录(见证奇迹的时刻!)
  • ssh bigdata02  
    # 直接登录成功,不再弹出密码输入框!  
    # 退出登录:exit  

    3. 特殊场景:让服务器免密登录自己

  • # 主节点bigdata01需要免密登录自身(Hadoop等框架启动时需要)  
    ssh-copy-id bigdata01  

    💡 为什么?:集群框架启动时会默认访问本地主机,免密登录避免循环认证,确保服务正常启动。

  • 4. 原理图解:3 步看懂密钥对认证流程(附人话解释)

  • 1. 目标服务器(bigdata02)生成一段随机字符串「hi there」,用bigdata01的公钥加密,变成乱码「#$%^&*」  
    2. bigdata01收到乱码后,用自己的私钥解密,得到原始字符串「hi there」,并回传给bigdata02  
    3. bigdata02对比两次的字符串,发现一致,于是放行登录(全程不传输密码,安全性MAX!)  

    5. 注意事项:细节决定成败

  • 单向性:当前是 bigdata01→bigdata02 免密,若要双向免密,需在 bigdata02 上重复①②步骤,生成并传输它的公钥到 bigdata01
  • 权限设置:确保 authorized_keys 文件权限为 600(只有所有者可读写),否则免密会失效:
  • chmod 600 /root/.ssh/authorized_keys  
  • 多节点集群:如果有 N 台从节点,只需在主节点生成一次密钥,然后用 ssh-copy-id 依次传给所有从节点,一劳永逸!
  • 三、飞哥总结:两大工具的「黄金使用法则」

    📦 scp 远程拷贝法则

  • 文件传输:单文件直接传,文件夹加 -r,跨远程用 IP 或主机名(优先 IP,兼容性更强)
  • 路径规范:目标路径统一格式「用户名 @主机:绝对路径」,例如 root@192.168.32.128:/etc/hosts
  • 安全第一:传输敏感文件(如数据库配置、私钥)必须用 scp,拒绝明文传输工具(如 FTP)
  • 密钥对本质:公钥公开给目标服务器,私钥自己妥善保管,绝不泄露(泄露私钥 = 服务器大门敞开!)
  • 集群必备:搭建分布式框架前,先配置好主从节点免密登录,避免启动时卡壳
  • 权限检查:设置完免密后,第一时间用 ssh 目标主机 测试,失败则检查 authorized_keys 权限和内容
  • 四、终极速查表:常用命令一键复制(建议截图保存)

  • 操作场景scp 命令示例免密登录命令示例
    本地→远程传文件scp 本地文件 用户名@主机:远程路径ssh-keygen -t rsa(生成密钥对)
    本地→远程传文件夹scp -r 本地文件夹 用户名@主机:远程路径ssh-copy-id 目标主机(传公钥)
    远程→本地下载文件scp 用户名@主机:远程文件 本地路径ssh 目标主机(验证免密登录)
    指定 SSH 端口scp -P 端口号 文件 用户名@主机:路径chmod 600 ~/.ssh/authorized_keys(设权限)
    服务器免密登录自己——ssh-copy-id localhost
            掌握这两个技能,服务器间的文件传输和登录操作将变得无比丝滑,从此告别手动输入密码的低效工作!无论是日常开发还是集群部署,都能节省大量时间,把精力聚焦在更有价值的代码上~ 觉得有用的话,点赞收藏走一波,评论区留言你在运维中遇到的难题,飞哥下次专门出教程帮你解决! 🚀
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值