当前位置:首页 > Linux > 正文

如何使用ssh登录linux服务器

使用 ssh [用户名]@[服务器IP/域名]:[端口] 命令,输入密码或加载私钥即可登录,首次需确认指纹

理解SSH的核心作用

SSH(Secure Shell)是一种加密的网络协议,用于在不安全的网络环境中安全地远程管理Linux/Unix服务器,相较于明文传输的Telnet,SSH通过非对称加密技术保障数据传输的安全性,支持身份验证、数据完整性校验和防中间人攻击,其核心功能包括:
远程命令执行
文件传输(配合scprsync
隧道代理(Port Forwarding)
图形化界面转发(X11 Forwarding)


前置准备条件

必备要素清单

项目 说明
SSH客户端 Windows/macOS/Linux均可使用系统自带终端或第三方工具(PuTTY、MobaXterm)
服务器信息 IP地址/域名 + 端口号(默认22,若修改需确认)
认证方式 密码认证(临时使用)或密钥认证(推荐长期使用)
网络连通性 确保本地与服务器之间可互通(可通过ping测试)

获取服务器访问权限

联系系统管理员获取以下任一组合:

  • 用户名 + 密码(首次登录后建议立即生成密钥)
  • 用户名 + SSH私钥(需提前将公钥上传至服务器)

基础登录流程详解

标准命令格式

ssh [选项] 用户名@服务器地址 -p 端口号

关键参数解析
| 参数 | 作用 | 示例 |
|————|—————————————-|——————————-|
| -i | 指定私钥文件路径 | -i ~/.ssh/id_rsa |
| -p | 自定义端口(非默认22时必填) | -p 2222 |
| -X | 启用X11转发(用于运行GUI程序) | -X |
| -L | 本地端口映射到远程服务器 | -L 8080:localhost:80 |
| -o StrictHostKeyChecking=no | 跳过首次连接时的主机密钥确认(仅测试环境使用) | — |

典型登录场景示例

场景1:密码认证(适用于临时访问)

ssh root@192.168.1.100
# 输入密码后回车即可登录

风险提示:频繁输错密码可能导致账户锁定,生产环境应禁用root直接登录。

场景2:密钥认证(推荐生产环境使用)
① 生成ED25519密钥对(比RSA更安全):

ssh-keygen -t ed25519 -C "your_email@example.com"
# 按提示选择保存路径(默认~/.ssh/id_ed25519),无需设置密码可直接回车

② 将公钥上传至服务器:

ssh-copy-id user@server_ip  # 自动完成公钥追加至~/.ssh/authorized_keys
# 若失败则手动操作:cat ~/.ssh/id_ed25519.pub | ssh user@server_ip 'cat >> .ssh/authorized_keys'

③ 无密码登录测试:

ssh -i ~/.ssh/id_ed25519 user@server_ip

进阶功能实战

X11转发实现图形化操作

当需要在本地显示远程服务器的GUI程序时(如MATLAB、GIMP):

# Linux/macOS客户端
ssh -X user@server_ip   # -X表示信任X11显示器
# Windows客户端需安装Xming/VcXsrv并设置DISPLAY环境变量
setxkbmap -model abnt2 & matlab &   # 启动巴西键盘布局的MATLAB

优化建议:通过~/.Xresources文件统一配置字体、主题等样式。

端口转发构建安全通道

案例:访问内网MySQL数据库
假设服务器A(公网IP: 203.0.113.5)可访问内网服务器B(192.168.1.2:3306),但外部无法直连B:

# 在本地机器执行
ssh -L 3307:192.168.1.2:3306 user@203.0.113.5
# 然后使用本地工具连接localhost:3307,流量经SSH隧道加密传输至B的3306端口
mysql -h localhost -P 3307 -u dbuser -p

此方法常用于绕过防火墙限制,且比直接暴露数据库端口更安全。

多跳代理突破网络限制

当目标服务器仅允许通过跳板机访问时:

# 第一步:登录跳板机BastionHost
ssh user@bastionhost.com
# 第二步:从跳板机跳转至目标服务器TargetServer
ssh admin@targetserver.internal   # 需确保跳板机允许二次跳转
# 合并为一条命令(使用ProxyJump)
ssh -J user@bastionhost.com admin@targetserver.internal

安全加固最佳实践

风险点 防范措施 实施命令/操作
弱密码暴力破解 禁用密码登录,强制使用密钥 vim /etc/ssh/sshd_config
PasswordAuthentication no
密钥泄露风险 定期轮换密钥,限制私钥文件权限 chmod 600 ~/.ssh/id_
touch ~/.ssh/config添加IdentityFile路径
空闲连接劫持 设置超时断开时间 ClientAliveInterval 300
ClientAliveCountMax 3
日志审计缺失 记录所有登录尝试 LogLevel VERBOSE
SyslogFacility AUTHPRIV
版本破绽利用 保持OpenSSH版本更新 apt update && apt install openssh-server

常见错误排查手册

现象 可能原因及解决方案
Connection refused 服务未运行 → systemctl status sshd
端口被防火墙拦截 → ufw allow 22
Permission denied 私钥权限错误 → chmod 600 id_rsa
公钥未正确添加到authorized_keys
Host key verification failed ️ 中间人攻击风险!
首次连接时输入yes接受指纹
️ 生产环境应固定已知主机指纹
Too many authentication failures 账户被临时锁定
⏳ 等待几分钟后重试
或联系管理员解锁

相关问答FAQs

Q1: 我忘记了SSH密码该怎么办?

A: 如果拥有物理控制权或救援模式访问权限:

  1. 重启服务器进入单用户模式(Grub菜单选择recovery mode);
  2. 挂载根分区为读写模式:mount -o remount,rw /
  3. 执行passwd username重置密码;
  4. 重启系统后即可用新密码登录。
    若无物理权限,需联系云服务商控制台重置实例密码。

Q2: SSH连接突然中断是什么原因?

A: 常见原因及解决方法:

  1. 网络波动:检查MTU值是否过大(建议调至1400以下);
  2. TCP Keepalive超时:在客户端添加ServerAliveInterval 60~/.ssh/config
  3. 资源耗尽:查看服务器负载(top命令),优化进程或升级配置;
  4. DNS解析异常:改用IP地址代替域名登录;
  5. 硬件故障:检查交换机端口状态灯是否正常。
0