目录
- 准备工作:你需要什么?
- 基本连接:首次连接
- 常用参数:更灵活的连接
- 安全配置:强化你的 SSH 服务器
- 高级技巧:提升你的工作效率
- 常见问题与解决方案
准备工作:你需要什么?
- 客户端: 你的电脑,无论是 Windows, macOS 还是 Linux,都自带或可以轻松安装 SSH 客户端。
- 服务器: 一台开启了 SSH 服务的 Linux 服务器,它需要有一个 IP 地址(或域名)和可以登录的用户名。
- 网络: 你的客户端电脑需要能够连接到服务器的 IP 地址(确保防火墙没有阻止 22 端口)。
基本连接:首次连接
这是最简单的连接方式,只需要服务器的 IP 地址和用户名。

命令格式:
ssh username@server_ip_address
示例:
假设你的服务器 IP 是 168.1.100,用户名是 root,那么命令就是:
ssh root@192.168.1.100
首次连接提示: 当你第一次连接时,客户端会显示服务器的公钥指纹,并询问你是否信任该主机,这是因为 SSH 无法确认你连接的就是你想要连接的服务器(可能存在中间人攻击)。
The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
输入 yes 并回车,该主机的密钥就会被保存在你本地的 ~/.ssh/known_hosts 文件中,下次连接就不会再提示了。

输入密码: 连接成功后,系统会提示你输入该用户的密码,输入时不会显示任何字符(光标也不会移动),这是正常的安全设计,输完后按回车。
如果密码正确,你将成功登录到服务器的命令行界面。
常用参数:更灵活的连接
SSH 命令支持很多参数,可以让你更高效、更安全地连接。
指定端口
默认情况下,SSH 服务运行在 22 端口,如果服务器修改了端口,你需要使用 -p 参数。

ssh -p 2222 username@server_ip_address
使用密钥对进行免密登录
这是 SSH 最推荐的方式,比密码更安全、更方便。
步骤 1:在客户端生成密钥对
如果你的电脑上还没有 SSH 密钥,可以使用 ssh-keygen 生成,通常一路回车即可。
ssh-keygen -t ed25519 -C "your_email@example.com"
这会在 ~/.ssh/ 目录下生成两个文件:
id_ed25519: 你的私钥,绝对不能泄露!id_ed25519.pub: 你的公钥,可以安全地分享给任何人。
步骤 2:将公钥复制到服务器
最简单的方法是使用 ssh-copy-id 命令。
ssh-copy-id -i ~/.ssh/id_ed25519.pub username@server_ip_address
这个命令会自动将你的公钥追加到服务器上用户 username 的 ~/.ssh/authorized_keys 文件中,并设置好正确的权限。
步骤 3:使用密钥登录 你可以直接通过密钥登录,无需输入密码。
ssh -i ~/.ssh/id_ed25519 username@server_ip_address
如果你在生成密钥时使用了默认路径,并且设置了 SSH Agent,甚至可以省略 -i 参数。
安全配置:强化你的 SSH 服务器(重要!)
默认的 SSH 配置可能存在安全风险,建议进行以下优化,这些修改通常在服务器的 /etc/ssh/sshd_config 文件中完成。
禁用 root 用户直接登录
PermitRootLogin 设置为 no,强制使用普通用户登录,然后通过 sudo 提权。
PermitRootLogin no
使用非标准端口
将 Port 从 22 改成一个不常用的端口号(2222),可以减少被自动化扫描攻击的几率。
Port 2222
只允许密钥登录,禁用密码登录 这是提升安全性的关键一步,在确保密钥登录正常工作后,禁用密码登录。
PasswordAuthentication no
PubkeyAuthentication yes
限制登录用户 只允许特定用户通过 SSH 登录。
AllowUsers alice bob
使用 fail2ban 防暴力破解
fail2ban 是一个防止入侵的工具,它可以监控日志(如 SSH 登录失败日志),并在短时间内检测到多次失败后,自动封禁攻击者的 IP 地址。
应用配置:
修改完 /etc/ssh/sshd_config 后,必须重启 SSH 服务使配置生效。
# 对于使用 systemd 的系统 (如 Ubuntu 16+, CentOS 7+) sudo systemctl restart sshd # 或者 sudo service ssh restart
高级技巧:提升你的工作效率
通过 SSH 隧口转发
SSH 可以安全地“隧道化”其他网络流量,常用于访问内网服务或绕过防火墙。
-
本地端口转发: 将你本地电脑的一个端口,通过 SSH 服务器转发到远程服务器(或其内网)的另一个端口。
# 将本地电脑的 8080 端口,转发到远程服务器 192.168.1.100 的 80 端口 ssh -L 8080:192.168.1.100:80 username@ssh_server_ip
之后,你在本地浏览器访问
http://localhost:8080,实际访问的是远程服务器的 80 端口。 -
远程端口转发: 将远程服务器的一个端口,转发到你本地电脑的端口。
使用 SSH 配置文件 (~/.ssh/config)
为了避免每次都输入冗长的命令,可以创建一个配置文件来管理不同的服务器连接。
编辑 ~/.ssh/config 文件(如果不存在则创建),添加如下内容:
# 服务器别名 myserver
Host myserver
HostName 192.168.1.100
User root
Port 2222
IdentityFile ~/.ssh/id_ed25519
# 可选:每次连接都保持会话活跃
ServerAliveInterval 60
# 服务器别名 work-laptop
Host work-laptop
HostName 10.0.0.55
User john
连接变得非常简单:
ssh myserver ssh work-laptop
使用 tmux 或 screen 保持会话
当你通过 SSH 连接服务器时,如果网络中断或关闭了终端窗口,你的会话就会被切断。tmux 和 screen 可以解决这个问题。
-
安装:
# Ubuntu/Debian sudo apt-get install tmux # CentOS/RHEL sudo yum install tmux
-
使用:
- 连接服务器后,输入
tmux new -s my_session创建一个名为my_session的新会话。 - 你可以在这个会话中正常工作,即使你断开连接(按
Ctrl+B然后按D),这个会话也会在后台保持运行。 - 下次连接时,输入
tmux attach -t my_session就可以重新回到之前的会话。
- 连接服务器后,输入
常见问题与解决方案
-
问题:
ssh: connect to host ... port 22: Connection timed out- 原因: 无法连接到目标 IP 的 22 端口。
- 解决:
- 检查服务器 IP 是否正确。
- 检查服务器是否正在运行。
ping一下服务器 IP。 - 检查服务器的防火墙(如
ufw,iptables)是否允许 22 端口的入站连接,在服务器上执行sudo ufw allow 22。 - 检查路由器或云服务商(如阿里云、腾讯云)的安全组是否开放了 22 端口。
-
问题:
Permission denied (publickey,password).- 原因: 认证失败。
- 解决:
- 确认用户名和密码是否正确。
- 如果使用密钥登录,确认公钥是否已正确添加到
~/.ssh/authorized_keys文件中,并且该文件和.ssh目录的权限正确(authorized_keys权限应为600,.ssh目录权限应为700)。 - 检查服务器
/etc/ssh/sshd_config中的PasswordAuthentication和PubkeyAuthentication设置。
-
问题:
Could not resolve hostname ...- 原因: DNS 解析失败。
- 解决: 检查你输入的域名或服务器 IP 是否正确,尝试用
pingIP 的方式确认网络是否可达。
| 场景 | 命令 |
|---|---|
| 基本连接 | ssh user@ip |
| 指定端口 | ssh -p 2222 user@ip |
| 密钥登录 | ssh -i ~/.ssh/key user@ip |
| 免密登录(配置后) | ssh user@ip |
| 配置文件别名 | ssh myserver |
掌握 SSH 是管理 Linux 服务器的基石,从简单的 ssh 命令开始,逐步过渡到密钥登录和配置文件,最后了解端口转发和会话持久化,你将能高效、安全地管理你的服务器。
