Linux指令篇:ssh
前言
ssh
(Secure Shell)是 远程登录、文件传输 和 安全通信 的重要工具,常用于 Linux 服务器管理。它提供了 加密连接,防止数据泄露,替代了不安全的 telnet
。
📌 1. ssh
命令基本语法
ssh [选项] 用户名@远程主机
参数 | 说明 |
---|---|
-p <端口> | 指定 SSH 端口(默认 22) |
-i <私钥文件> | 使用指定的私钥文件 |
-C | 启用压缩,提高低速网络性能 |
-X / -Y | 启用 X11 转发(远程 GUI 程序) |
-L / -R | 端口转发(本地/远程) |
📌 2. 基本 SSH 连接
🎯 2.1 远程登录
ssh user@remote_host
📌 示例:
ssh root@192.168.1.100
✅ 作用:登录 192.168.1.100
服务器,使用 root
用户。
🎯 2.2 指定端口
ssh -p 2222 user@remote_host
📌 作用:如果远程服务器 SSH
端口不是默认 22
,需要指定端口 2222
。
🎯 2.3 免密码登录(使用 SSH 密钥)
🛠️ 1️⃣ 生成 SSH 密钥
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
📌 作用:生成 4096 位 RSA
密钥(公钥 id_rsa.pub
,私钥 id_rsa
)。
🛠️ 2️⃣ 复制公钥到远程服务器
ssh-copy-id user@remote_host
📌 作用:将公钥 ~/.ssh/id_rsa.pub
复制到远程 ~/.ssh/authorized_keys
。
✅ 之后登录无需输入密码:
ssh user@remote_host
🎯 2.4 配置 SSH 免密别名
编辑 ~/.ssh/config
文件:
Host myserver
HostName 192.168.1.100
User root
Port 2222
IdentityFile ~/.ssh/id_rsa
📌 作用:这样只需输入:
ssh myserver
就能连接 192.168.1.100
,无需每次输入完整命令。
📌 3. 远程执行命令
🎯 3.1 在远程服务器上执行单个命令
ssh user@remote_host "ls -lah"
📌 作用:在 remote_host
上执行 ls -lah
,并返回结果。
🎯 3.2 执行多个命令
ssh user@remote_host "cd /var/www && ls -lah"
📌 作用:先 cd
目录,再执行 ls
。
✅ 也可以使用 << EOF
运行多行命令:
ssh user@remote_host << EOF
cd /var/log
ls -lah
exit
EOF
📌 4. SSH 端口转发
🎯 4.1 本地端口转发(访问远程服务)
ssh -L 8080:localhost:3306 user@remote_host
📌 作用:
- 把 本地 8080 端口 映射到 远程 MySQL 3306
- 这样本地
127.0.0.1:8080
就相当于访问远程3306
端口
✅ 本地连接 MySQL 示例:
mysql -h 127.0.0.1 -P 8080 -u root -p
🎯 4.2 远程端口转发(让远程访问本地服务)
ssh -R 9000:localhost:80 user@remote_host
📌 作用:
- 让远程
9000
端口访问 本地80
端口 - 适用于 让公网服务器访问内网服务
✅ 远程服务器访问:
curl http://localhost:9000
📌 5. 代理 & 跳板机
🎯 5.1 SOCKS5 代理(科学上网)
ssh -D 1080 user@remote_host
📌 作用:
- 在本地
1080
端口创建 SOCKS5 代理 - 可用于浏览器代理或
proxychains
🎯 5.2 通过跳板机连接
ssh -J jump_host user@target_host
📌 作用:
- 先通过
jump_host
(跳板机)登录,再连接target_host
✅ 等效于:
ssh user@jump_host
ssh user@target_host
📌 6. 远程复制文件(SCP)
🎯 6.1 复制文件到远程
scp file.txt user@remote_host:/home/user/
📌 作用:把 file.txt
复制到远程 /home/user/
。
🎯 6.2 复制目录到远程
scp -r my_folder user@remote_host:/home/user/
📌 作用:复制整个 my_folder
目录。
🎯 6.3 从远程复制文件到本地
scp user@remote_host:/home/user/file.txt ./
📌 7. 关闭 & 重启 SSH 服务
🎯 7.1 关闭 SSH
sudo systemctl stop ssh
🎯 7.2 启动 SSH
sudo systemctl start ssh
🎯 7.3 重启 SSH
sudo systemctl restart ssh
✅ 适用于 SSH 配置修改后重启服务。
📌 8. 配置 SSH 服务器
SSH 服务器配置文件:/etc/ssh/sshd_config
编辑:
sudo vim /etc/ssh/sshd_config
配置项 | 作用 |
---|---|
Port 2222 | 修改 SSH 端口为 2222 |
PermitRootLogin no | 禁止 root 登录 |
PasswordAuthentication no | 禁用密码登录(只允许密钥登录) |
AllowUsers user1 user2 | 仅允许 user1 和 user2 连接 |
✅ 修改后重启 SSH:
sudo systemctl restart ssh
📌 9. ssh
vs telnet
功能 | ssh | telnet |
---|---|---|
加密 | ✅ 是 | ❌ 否 |
安全性 | ✅ 高 | ❌ 低 |
文件传输 | ✅ 支持 | ❌ 不支持 |
✅ 结论:SSH 远程管理 比 telnet
更安全,推荐使用。
🎯 总结
操作 | 命令 |
---|---|
远程登录 | ssh user@remote_host |
指定端口 | ssh -p 2222 user@remote_host |
免密登录 | ssh-copy-id user@remote_host |
远程执行命令 | ssh user@remote_host "ls -lah" |
端口转发 | ssh -L 8080:localhost:3306 user@remote_host |
代理 | ssh -D 1080 user@remote_host |
如果觉得这篇博客对你有帮助,记得点赞 ⭐、收藏 📌、关注 🚀!