上一篇
linux连接远程服务器命令
- 云服务器
- 2025-08-10
- 9
使用 ssh 用户名@服务器IP 或 ssh 用户名@域名 可连接 Linux 远程服务器,首次需
基础语法与核心命令
ssh 命令(推荐)
| 功能 | 命令示例 | 说明 |
|---|---|---|
| 基础连接 | ssh user@hostname | user为远程用户名,hostname可为IP或域名 |
| 指定端口 | ssh -p 2222 user@hostname | 默认SSH端口为22,若修改需通过-p指定 |
| 首次连接保存主机信息 | ssh -o StrictHostKeyChecking=no user@hostname | 跳过首次连接时的RSA密钥验证提示(仅测试环境使用) |
| 交互式终端 | ssh user@hostname | 直接进入远程Shell,支持Tab补全与命令历史记录 |
| 执行单条命令 | ssh user@hostname "ls /home" | 在远程服务器执行指定命令后自动退出 |
| 本地端口转发 | ssh -L 8080:localhost:80 user@hostname | 将本地8080端口映射至远程服务器的80端口(用于调试Web应用) |
| X11图形界面转发 | ssh -X user@hostname | 启用X11转发,可在本地显示远程GUI程序(需安装XQuartz等依赖) |
telnet 命令(不推荐)
️ 警告:Telnet以明文传输数据,存在严重安全隐患,仅适用于非敏感场景测试。
| 命令示例 | 说明 |
|——————-|————————–|
| telnet hostname | 默认使用23端口建立TCP连接 |
| telnet hostname 3306 | 连接MySQL默认端口 |


身份验证方式
| 类型 | 配置方法 | 优点 | 缺点 |
|---|---|---|---|
| 密码认证 | 输入user@hostname后直接输入密码 | 简单易用 | 易受暴力免费攻破 |
| 密钥认证 | 生成SSH密钥对:ssh-keygen → 将公钥上传至服务器~/.ssh/authorized_keys | 安全性高,免重复输入 | 初始配置稍复杂 |
| 混合模式 | 同时启用密码+密钥认证 | 兼顾便利与安全 | 仍需管理两种认证方式 |
密钥生成示例:
# 生成ED25519密钥(推荐) ssh-keygen -t ed25519 -C "your_email@example.com" # 输出公钥内容(需粘贴到服务器) cat ~/.ssh/id_ed25519.pub
高级操作技巧
多跳代理连接
# 通过中间跳板机A连接到目标服务器B ssh userB@B_host -t "ssh userC@C_host" # 或使用ProxyJump配置(~/.ssh/config) Host jumphost HostName A_host User userA Host finalhost HostName B_host User userB ProxyJump jumphost
后台任务管理
| 场景 | 解决方案 | 说明 |
|---|---|---|
| 长时间运行任务 | nohup command &> output.log & | 断开SSH后任务继续执行,日志存入文件 |
| 实时查看日志 | tail -f output.log | 监控正在写入的日志文件 |
| 断线重连保护 | screen/tmux | 创建持久化会话,重新连接后恢复现场 |
文件传输加速方案
| 工具 | 命令示例 | 特点 |
|---|---|---|
| scp | scp local_file user@host:/remote/path | 基于SSH协议加密传输 |
| rsync | rsync -avzP local_dir/ user@host:/remote/dir/ | 增量同步+压缩,适合大文件传输 |
| lftp | `lftp -c “open host; put file”“ | FTP客户端,支持断点续传 |
常见问题与解答
Q1: 连接时报 “Permission denied (publickey)” 怎么办?
A: 可能原因及解决方案:
- 未授权密钥:检查服务器~/.ssh/authorized_keys是否包含当前客户端公钥;
- 权限问题:确保客户端私钥文件权限为600(chmod 600 ~/.ssh/id_rsa);
- 路径错误:默认查找~/.ssh/id_rsa,若自定义路径需通过-i指定私钥文件;
- SELinux限制:临时禁用验证:sudo setenforce 0(生产环境慎用)。
Q2: 如何批量执行命令到多台服务器?
A: 推荐两种方案:
- 并行执行(使用parallel): # 创建主机列表 hosts.txt echo "server1 server2 server3" > hosts.txt # 并行执行命令 parallel --file hosts.txt 'ssh {} "df -h"'
- 串行执行(适合顺序依赖场景): for host in server1 server2 server3; do ssh $host "systemctl restart httpd" || echo "$host failed" done
补充注意事项
- 防火墙配置:确保服务器开放SSH端口(默认22),可通过ufw allow 22(Ubuntu)或firewall-cmd --add-port=22/tcp(CentOS)放行;
- 超时设置:通过ClientAliveInterval和ClientAliveCountMax调整无操作超时时间(修改/etc/ssh/sshd_config);
- 日志审计:查看连接记录 journalctl -u sshd,定位异常登录尝试;
- 版本兼容性:新旧版OpenSSH可能存在算法差异,建议统一使用OpenSSH 8.0+
