1. 连接服务器这件事,先把底层逻辑搞清楚
1.1 你连接的到底是什么:IP、端口和SSH服务
很多刚接触服务器的朋友,第一次听到"连接服务器"这个概念时,脑子里通常是模糊的——我到底在连什么?是一个远程桌面?还是一个网页后台?都不是。你在做的,其实是让本机的一个客户端程序,和服务器上的一个服务进程之间,建立一条加密的通信通道。
可以把服务器理解成一栋只留了一个门牌号的写字楼。IP地址就是这栋楼所在的小区位置,端口号就是具体的房间号,而你输入的用户名和密码,就是前台验证身份的过程。三者缺一不可。Linux服务器默认开的是22号端口,跑的是sshd这个服务进程,你的电脑通过SSH协议去敲门。只要你用的是Linux系统的云服务器,几乎都是这个套路。
这个理解非常重要,因为后面所有的排查和配置,本质上都是在跟这三样东西打交道——IP通不通、端口通不通、身份验证通不通。很多同学一上来就照着教程敲命令,敲完发现连不上,就开始胡猜乱试,其实只要把这条链路在脑子里画清楚,问题定位会快得多。
1.2 为什么大家都在用SSH,而不是Telnet或者其他方式
讲个真实的事。我早期维护一台旧设备,厂商文档里写的还是Telnet方式登录。我敲下去之后,用户名密码竟然也通了,但旁边的前辈立刻让我退出来,说这玩意儿在网络上就是裸奔——你敲的每一个字符,包括密码,都是明文传出去的。这就好比你把自己的银行卡密码写在明信片上寄出去,沿途每个经手的人都能看见。
SSH的全称是Secure Shell,它的核心价值在于加密。从你输入用户名的第一个字符开始,客户端和服务端之间的通信就是加密的。即便有人抓包,抓到的也是一堆乱码。另外SSH还解决了身份伪造的问题,通过host key机制,客户端可以确认自己连接的确实是目标服务器,而不是中间被劫持到了一个假冒机器上。
这也就是为什么现在不管你是连Linux服务器、连交换机、连NAS,还是用Git拉代码,底层用的都是SSH协议。理解了这一层,你就知道,凡是远程管理类操作,优先想SSH准没错。
1.3 常见连接工具怎么选:命令行、终端软件还是VSCode
确定了要用SSH协议之后,剩下的问题就是用什么工具去连。这个选择其实很自由,但不同场景下的体验差异极大。
最基础的是系统自带的命令行SSH客户端。Windows 10以上的系统,PowerShell或CMD里直接敲ssh命令就能用,不需要装任何东西。macOS和Linux更是原生自带。这种方式的优点是干净、轻量,服务器上有什么命令就直接敲什么命令,没有任何中间层干扰。缺点是如果你需要同时管理多台服务器,每个窗口都要重新登录,操作效率略低。
终端类软件我平时用得比较多的是Termius和FinalShell。Termius跨平台,Windows、macOS、手机都能装,会话信息云端同步,适合有多台服务器、多设备管理需求的人。FinalShell国产,自带服务器性能监控图表,对新手很友好,文件上传下载也有图形界面可以拖拽。这类工具的本质仍然是SSH客户端,只是把会话管理、文件管理、性能监控做成了集成式体验,省去很多手动操作的繁琐。
如果你的开发场景是"远程改代码",那VSCode的Remote-SSH插件是首选。装好插件后,用ssh user@ip的方式连接远程服务器,VSCode就会在远端启动一个server,让你像写本地代码一样直接编辑服务器上的文件,终端、调试器、插件全部走远程。编译在服务器上跑,代码在本地写,体验非常流畅。需要注意的一点是,Remote-SSH依赖本机的SSH配置,如果你的~/.ssh/config写得不规范,插件连不上时往往不会报很明确的错误,这个后面会专门讲。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 从密码到密钥:把连接做成"一次配置,长期使用"
2.1 第一次连接:密码登录的正确姿势
先说最基础的。假设你刚买了一台云服务器,拿到的信息包括一个公网IP、一个用户名(通常是root或ubuntu)、一个初始密码。那么第一次连接就是一行命令的事:
bash复制ssh root@你的服务器IP
如果你要指定端口,加-p参数:
bash复制ssh -p 22 root@你的服务器IP
第一次连接时,系统会提示你确认远程主机的指纹信息,问Are you sure you want to continue connecting (yes/no)?,这里输入yes回车。这个机制就是前面提到的host key校验——你的客户端会把服务器的公钥指纹记下来,下次连接时如果指纹变了,它会警告你,防止中间人攻击。所以遇到指纹警告的时候,千万别图省事直接跳过,先确认服务器是不是被人重装过系统或者做了什么改动。
密码登录虽然简单,但有几个天生缺陷:第一,密码本身容易被暴力破解,服务器挂到公网上半小时就能看到一堆失败的登录尝试;第二,每次连接都要输密码,频繁操作时很烦人;第三,如果你有多台服务器、多个密码,管理成本直线上升。所以我的建议是,密码登录只作为第一次进服务器的过渡方案,之后立刻换成密钥认证。
2.2 生成密钥对:公钥是锁,私钥是钥匙
密钥认证的核心逻辑,通俗地讲就是:你在本地生成一对钥匙,一把是公钥(Public Key),一把是私钥(Private Key)。公钥放到服务器上,私钥留在本地。连接时,服务器用公钥加密一个随机数发给客户端,客户端用私钥解开并返回结果,服务器验证通过后放行。整个过程私钥不会在网上传输,安全性远高于密码。
生成密钥对的命令很简单:
bash复制ssh-keygen -t ed25519 -C "你的备注信息"
这里尽量用ed25519而不是传统的RSA。ed25519密钥更短、生成速度快、安全性也足够高,而且现代Linux系统全部支持。命令执行后,一路回车即可,默认会存到~/.ssh/id_ed25519这个路径。如果提示输入passphrase,我建议设置一个——这是给私钥再加一层密码保护,即便私钥文件泄露,别人没有passphrase也解不开。
生成完之后,你会看到两个文件:id_ed25519是私钥,id_ed25519.pub是公钥。私钥无论如何都不要发给别人,公钥可以随便分发。注意检查一下本地私钥文件的权限,Linux和macOS下应该是600,Windows下也要确保私钥文件不能对其
