SSH(Secure Shell)

1. 什么是 SSH?

SSH 是一种加密的网络协议,用于安全地远程登录到服务器和执行命令。

2. 基本连接命令

1
2
3
4
5
6
7
8
9
10
11
# 最基本连接(使用当前用户名)
ssh 192.168.1.100

# 指定用户名
ssh username@192.168.1.100

# 指定端口(默认是22)
ssh -p 2222 username@192.168.1.100

# 使用域名连接
ssh username@example.com

3. 高级用法

密钥认证(免密码登录):

1
2
3
4
5
6
7
8
# 生成密钥对
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

# 将公钥复制到服务器
ssh-copy-id username@192.168.1.100

# 或者手动复制
cat ~/.ssh/id_rsa.pub | ssh username@192.168.1.100 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

执行远程命令:

1
2
3
4
5
# 执行单条命令
ssh username@192.168.1.100 "ls -la"

# 执行多条命令
ssh username@192.168.1.100 "cd /var/log && tail -f syslog"

端口转发:

1
2
3
4
5
6
7
8
# 本地端口转发(将远程端口映射到本地)
ssh -L 8080:localhost:80 username@192.168.1.100

# 远程端口转发(将本地端口映射到远程)
ssh -R 9090:localhost:3000 username@192.168.1.100

# 动态端口转发(SOCKS代理)
ssh -D 1080 username@192.168.1.100

文件传输:

1
2
3
4
5
6
7
8
# 从本地复制到远程
scp file.txt username@192.168.1.100:/path/to/destination/

# 从远程复制到本地
scp username@192.168.1.100:/path/to/file.txt ./

# 递归复制目录
scp -r directory/ username@192.168.1.100:/path/to/destination/

SSH 配置简化:

1
2
3
4
5
6
7
8
9
# 编辑 ~/.ssh/config
Host myserver
HostName 192.168.1.100
User username
Port 22
IdentityFile ~/.ssh/id_rsa

# 然后就可以简化连接
ssh myserver

4. 常用选项

1
2
3
4
5
ssh -v          # 详细模式(调试)
ssh -C # 压缩数据传输
ssh -X # 启用X11转发(图形界面)
ssh -A # 启用认证代理转发
ssh -t # 强制分配伪终端

FTP(File Transfer Protocol)

1. 什么是 FTP?

FTP 是用于在网络上进行文件传输的协议。注意:FTP 是不加密的,建议使用 SFTP 或 SCP。

2. 基本 FTP 命令

连接 FTP 服务器:

1
2
ftp ftp.example.com
ftp 192.168.1.100

3. FTP 常用命令

登录后操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 登录后输入用户名密码,或使用:
ftp -u username:password ftp.example.com

# 在 FTP 会话中的命令:
ls # 列出远程文件
dir # 详细列出远程文件
pwd # 显示远程当前目录
cd /path # 改变远程目录
lcd /local/path # 改变本地目录

get filename # 下载单个文件
mget *.txt # 下载多个文件(通配符)
put filename # 上传单个文件
mput *.txt # 上传多个文件

delete filename # 删除远程文件
mkdir dirname # 创建远程目录
rmdir dirname # 删除远程目录

binary # 设置为二进制传输模式
ascii # 设置为ASCII传输模式

passive # 切换被动模式
active # 切换主动模式

bye # 退出FTP
quit # 退出FTP

4. 更安全的替代方案:SFTP

SFTP(SSH File Transfer Protocol):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 连接SFTP
sftp username@192.168.1.100

# SFTP会话中的命令:
ls # 列出文件
lls # 列出本地文件
cd /path # 改变远程目录
lcd /local/path # 改变本地目录

get file # 下载文件
put file # 上传文件
rm file # 删除文件
mkdir dir # 创建目录

exit # 退出

命令行 SFTP 传输:

1
2
3
4
5
6
7
8
# 下载文件
sftp username@192.168.1.100:/remote/path/file.txt ./local/path/

# 上传文件
sftp username@192.168.1.100 <<< $'put localfile.txt /remote/path/'

# 批量操作
sftp -b commands.txt username@192.168.1.100

5. 其他 FTP 工具

使用 curl:

1
2
3
4
5
# 下载文件
curl -u username:password -O ftp://ftp.example.com/file.txt

# 上传文件
curl -u username:password -T file.txt ftp://ftp.example.com/

使用 wget:

1
wget --ftp-user=username --ftp-password=password ftp://ftp.example.com/file.txt

使用 lftp(功能强大的 FTP 客户端):

1
2
3
lftp -u username,password ftp.example.com
# lftp 会话中:
mirror /remote/dir /local/dir # 同步整个目录

安全建议

  1. 优先使用 SSH/SFTP 而不是 FTP
  2. 禁用密码认证,使用密钥认证
  3. 更改默认 SSH 端口
  4. 使用 Fail2ban 防止暴力破解
  5. 定期更新 SSH 密钥

实用示例

通过 SSH 管理远程服务器:

1
2
3
4
5
6
7
8
# 查看服务器状态
ssh user@server "uptime && free -h && df -h"

# 备份远程文件到本地
ssh user@server "tar czf - /important/data" > backup.tar.gz

# 实时查看日志
ssh user@server "tail -f /var/log/syslog"

批量文件操作:

1
2
3
4
5
# 使用 rsync over SSH(推荐)
rsync -avz -e ssh /local/dir/ user@server:/remote/dir/

# 使用 scp 批量传输
scp -r user@server:/remote/dir/* ./local/dir/

SSH 是现代系统管理的必备工具,而 FTP 由于其安全性问题,建议仅在内部网络或使用 SFTP 替代。