跳到主要内容

通过 SSH 连接 Linux 服务器

SSH 是网络安全协议,用于在不安全的网络环境中(如公共互联网)为计算机之间建立安全的加密连接,是我们远程登录 Linux 服务器的常用方式。除了实现远程命令行登录,SSH 还可以实现远程命令执行和文件传输。

本文将从零开始,带你掌握这门通往 Linux 世界的核心技术。

什么是 SSH?

SSH(Secure Shell)不仅仅是一个命令,它是一个加密的网络协议。在 SSH 诞生之前,人们使用 Telnet 等工具远程管理电脑,但它们有一个致命弱点——使用“明文”传输数据。这就好比你拿着大喇叭在广场上喊你的银行卡密码,任何中间人都能听得一清二楚。

而 SSH 的出现,就是为了建立一条加密的地下隧道,让远程登录变得更安全。主要包括两方面:

  1. 身份验证:服务器向你证明它是真的(防止你连到黑客的假服务器),你也向服务器证明你是谁。
  2. 数据加密:一旦连接建立,你们之间传输的所有指令和文件都会变成乱码,即使被截获也无法破解。

SSH 的使用方法

第一步:准备一个 SSH 客户端

想要通过 SSH 连接 Linux 服务器,首先需要在你的电脑上安装 SSH 客户端 —— 它就像是一根魔法棒,没有它可不行哦!

对于 Linux 和 MacOS 用户,通常不需要额外安装,因为系统已经自带 SSH 客户端命令行工具。直接打开 Terminal(终端),输入 ssh -V,如果看到了版本号(如 OpenSSH_8.x),说明你的“魔法棒”已经就绪。

如果确实没有,可以手动安装,例如在 Ubuntu 系统执行:

sudo apt install openssh-client

对于 Windows 用户,Windows 10 和 11 已经内置了 OpenSSH,打开 PowerShellCMD(命令提示符)即可使用 SSH 命令行工具,和 Linux/Mac 系统的使用方法一致。如果你更喜欢图形界面,可以下载 PuTTYMobaXterm 等软件工具(参考《SSH 客户端工具》)。

第二步:建立 SSH 连接

当你已经手握魔法棒,接下来就需要念出咒语,建立 SSH 连接。“咒语”的关键是服务器的 IP 地址(例如192.168.1.100)和用户名(例如 rootadmin)。

连接命令格式如下

ssh 用户名@服务器IP地址

例如你的用户名是 geek,服务器 IP 是 192.168.100.100,请输入:

ssh geek@192.168.100.100

第一次连接时,终端可能会弹出一段警告:

The authenticity of host '...' can't be established. Are you sure you want to continue connecting (yes/no/[fingerprint])?

这是 SSH 在严肃地问你:“我以前没见过这台服务器,这是它的‘身份证’(指纹),你确定要信任它吗?”

输入 yes 并回车。这个“身份证”会被保存在你本地的~/.ssh/known_hosts文件中,下次连接就不会再问了。

接下来,输入密码。注意:输入密码时屏幕上不会显示任何字符(没有星号,也没有黑点),这是正常的安全设计。输完直接回车即可。

第三步:指定参数(可选)

有时候,服务器为了安全,会修改默认的 22 端口,甚至有一些服务器为了安全,禁止通过密码登录,必须指定特定的密钥才能登录。

  • 修改端口连接: 如果服务器管理员告诉你端口改成了 2222,你需要加上 -p 参数:

    ssh -p 2222 geek@192.168.100.100
  • 指定密钥连接: 如果你使用密钥登录,且密钥文件名为 mykey

    ssh -i ~/.ssh/mykey geek@192.168.100.100

第四步:设置免密登录

如果觉得每次输密码太麻烦,那么可以用“公钥”和“私钥”来实现 SSH 自动登录,操作方法如下。

  1. 生成钥匙对(在本地电脑执行):

    ssh-keygen

    一路回车即可,默认会在~/.ssh/目录下生成两个文件:id_rsa(私钥,自己留着)和id_rsa.pub(公钥,给服务器的)。

  2. 把公钥给服务器: 最简单的方法是使用 ssh-copy-id 命令:

    ssh-copy-id geek@192.168.100.100
  3. 输入一次密码后,公钥就自动上传并配置好了。

  4. 再次输入 ssh geek@192.168.100.100,你会发现直接就能进去了!

常见问题解答(FAQ)

Q1: 遇到“Too many authentication failures”报错怎么办?

现象:刚输入命令连接,还没输密码,就提示 Received disconnect... Too many authentication failures

原因:这通常不是密码错了,而是你的电脑太“热情”了。你的电脑里可能保存了多个 SSH 密钥,它在连接时会自动按顺序一个个尝试。如果尝试次数超过了服务器允许的上限(默认通常是 6 次),服务器就会直接切断连接。

解决方案

  • 临时方案:强制只用密码登录,跳过密钥尝试:

    ssh -o PubkeyAuthentication=no geek@192.168.100.100
  • 永久方案:修改本地配置文件 ~/.ssh/config,添加 IdentitiesOnly yes,告诉电脑“只准用我指定的钥匙,别乱试”。

Q2: 提示“Permission denied (publickey,password)”?

原因:这说明服务器拒绝了你的验证。

  • 如果是密码登录:大概率是密码输错了(注意大小写)。
  • 如果是密钥登录:可能是私钥文件权限不对(太开放了),或者是公钥没有正确放入服务器的 ~/.ssh/authorized_keys 文件中。

Q3: 连接提示“Connection refused”?

原因

  • IP地址错了:检查是否手滑输错了数字。
  • 端口错了:服务器可能改了端口,记得加 -p 参数。
  • 服务没开:服务器端的 SSH 服务可能挂了,或者防火墙(如阿里云/腾讯云的安全组)没有放行 22 端口。

Q4: 怎么在服务器上执行命令而不登录进去?

你可以直接在命令后面加上远程指令,例如查看远程服务器的时间:

ssh geek@192.168.100.100 "date"

这会直接在本地输出远程服务器的时间,非常适合写自动化脚本。

Q5: 万一连不上了,还有救吗?

如果你把 SSH 配置改坏了(比如改错了端口导致连不上),或者忘记了密码,别急。如果你使用的是云服务器(如阿里云、腾讯云、AWS),可以在网页控制台上找到 “VNC登录” 或 “远程连接” 功能。这相当于直接接上了服务器的显示器和键盘,即使 SSH 挂了也能进去修复配置。