人人都会AI编程

11.4 远程连接:ssh、scp、sftp 远程登录与文件传输

更新时间:2026-07-12

在实际的服务器管理工作中,直接坐在机器前面操作几乎是不可能的——服务器要么托管在遥远的数据中心,要么是云上的虚拟机。Linux 提供了一整套基于 SSH(Secure Shell)协议 的工具,让远程管理变得安全且高效。SSH 协议对通信进行加密,确保在不可信网络上传输的命令、密码和数据不会被窃听或篡改。通常用到的三个核心命令是:ssh(远程登录)、scp(安全拷贝)和 sftp(交互式文件传输)。

1. ssh:安全的远程命令行登录
最基本的用法非常简单:

ssh 用户名@远程主机地址

例如:ssh root@192.168.1.100。如果是第一次连接,系统会显示远程主机的密钥指纹,让你确认(输入 yes),此后密钥会被缓存,如果某天突然报密钥不匹配,很可能是有人在中间冒充,应当立刻警觉。

如果你本地和远程的用户名相同,甚至可以直接 ssh 远程主机地址,省去用户名。

在实际使用中,常用选项包括:

  • -p 端口号:如果 SSH 服务监听在非标准端口(如 2222),需指定 ssh -p 2222 user@host
  • -i 私钥文件:使用密钥认证代替密码,例如 ssh -i ~/.ssh/my_key user@host
  • -L / -R / -D:本地/远程端口转发和动态 SOCKS 代理,用于通过跳板机访问内部网络服务,这在中高级运维中非常实用。

强烈推荐的做法是关闭密码登录,启用密钥认证。安全且免去每次输入密码。配置流程通常为:

  1. 在本地生成一对密钥:ssh-keygen -t ed25519(推荐 ed25519 算法,比 RSA 更安全更快);
  2. 将公钥复制到远程服务器:ssh-copy-id user@host
  3. 测试无误后,编辑远程服务器上的 /etc/ssh/sshd_config,设置 PasswordAuthentication no 并重启 sshd 服务。

日常工作中,ssh 还可以直接执行一条命令而不进入交互式 shell:

ssh user@host 'df -h'      # 远程查看磁盘使用情况
ssh user@host 'systemctl status nginx'

这在脚本化巡检时极其方便。

2. scp:在本地与远程之间安全拷贝文件
scp 基于 SSH 协议,用法很像普通的 cp,只是地址前面要加上远程标识。基础语法为:

scp 源路径 目标路径

文件从本地上传到远程:

scp report.pdf user@192.168.1.100:/home/user/docs/

从远程下载到本地:

scp user@192.168.1.100:/var/log/syslog ./remote-syslog.txt

拷贝目录需要加 -r(递归):

scp -r my_project/ user@host:/opt/backups/

常用选项:

  • -P 端口号:指定远程 SSH 端口(注意是大写 P,与 ssh 的小写 p 区分);
  • -i 私钥文件:使用指定私钥;
  • -C:传输过程中压缩数据,慢速网络下可明显提升速度。

scp 适合在操作前就明确要传哪些文件,一次执行完毕。如果你需要不断浏览和挑选文件,sftp 更合适。

3. sftp:交互式文件传输与远程文件管理
sftp 同样基于 SSH,但打开后是一个交互式命令行环境,可以在远程目录间移动、列出文件、上传下载,就像在使用一个极简的 FTP 客户端。连接:

sftp user@host

进入后会出现 sftp> 提示符,常用命令包括:

  • lscdpwd:像操作本地文件一样浏览远程;
  • llslcdlpwd:操作本地目录(l 代表 local);
  • get 远程文件 [本地路径]:下载文件;
  • put 本地文件 [远程路径]:上传文件;
  • get -r 远程目录 / put -r 本地目录:递归下载/上传整个目录;
  • rmmkdir 等:操作远程文件系统。

例如,登录后要下载远程的 /var/log/nginx/access.log 到当前本地目录,只需:

get /var/log/nginx/access.log

sftp 也支持断点续传(reput/reget),在网络不稳定的大文件传输中非常有用。

4. 实用建议

  • 在云主机上,默认用户名通常是 ubuntuec2-usercentos 等,而非 root;必须用提供的初始密钥(.pem 文件)连接。
  • 配置文件 ~/.ssh/config 可以为常用连接设置别名、端口、密钥,避免反复输入长串命令。例如:
  Host myserver
      HostName 203.0.113.10
      User admin
      Port 2222
      IdentityFile ~/.ssh/id_ed25519
  

配置完毕后,ssh myserver 即可一键连接,scp file myserver:~ 同样生效。

  • 若网络极差,传输大文件时可考虑 rsync(需另学),它支持增量传输和断点续传,比 scp 更高效。
  • 永远不要在生产服务器上随意打开密码认证,也务必保护好私钥文件(权限设为 600,即 chmod 600 ~/.ssh/id_ed25519)。

掌握 sshscpsftp,就掌握了远程操控 Linux 服务器的基本桥梁。它们轻量、强大且标配于所有 Linux 环境,是日常运维中使用频率最高的三件套。