SSH连接另一台服务器,核心就一句话:通过加密通道,用认证凭据登录远程主机并执行命令,最直接的方式是 ssh 用户名@服务器IP 这条命令。日常运维、网站部署、代码管理都离不开它,掌握这个技能等于拿到了服务器的钥匙。
SSH连接前需要确认的三件事
在敲键盘之前,先确认三个基础条件,缺一不可。
网络层面,目标服务器的22端口(SSH默认端口)必须对你开放,本地测试可以先用 telnet IP 22 看通不通,通了会显示连接成功,不通会卡住或报错。
账号层面,你需要有目标服务器的登录用户名和密码,或者已经配置好的密钥对,没有账号,技术再强也进不去。
客户端层面,Windows 10以上系统自带OpenSSH客户端,Mac和Linux天然支持,完全不需要额外安装第三方工具,手机端的Termius、JuiceSSH也能连,操作逻辑一样。
密码登录:最简单直接的连法
基础命令格式
打开终端(Windows是CMD或PowerShell,Mac/Linux是Terminal),输入以下命令:
ssh root@192.168.1.100
root是服务器上的用户名,可以是任何有登录权限的用户。168.1.100是服务器的IP地址,也可以是域名。- 如果服务器改了端口,比如用了2222,需要加
-p参数:ssh -p 2222 root@192.168.1.100。
首次连接的指纹确认
第一次连接某个服务器时,系统会提示:
The authenticity of host '192.168.1.100' can't be established. ED25519 key fingerprint is SHA256:... Are you sure you want to continue connecting (yes/no)?
这是SSH在验证服务器身份,防止中间人攻击。确认服务器信息无误后输入yes回车,以后再连就不会再问你了。
Windows系统使用ssh连接服务器的完整步骤
- 按
Win+R,输入cmd打开命令行窗口。 - 输入
ssh 用户名@服务器IP,回车。 - 看到
password:提示后,输入密码(输入时不显示任何字符是正常现象),回车。 - 登录成功后,命令行提示符会变成类似
root@your-server:~#的样子。
期间如果出现 Permission denied, please try again.,说明密码输错了。Connection refused 则说明端口没开放或SSH服务没启动。
密钥登录:更安全更省心的linux ssh登录远程服务器方式
密码登录每次都要输密码,而且密码容易被暴力破解,密钥登录是目前行业内公认的标准做法,私钥留在本地,公钥放到服务器上,登录时不需要密码,安全性更高。
生成密钥对
本地终端执行:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
一路回车即可,会在默认位置(~/.ssh/)生成两个文件:id_rsa(私钥,千万别泄露)和 id_rsa.pub(公钥,需要放到服务器上)。
将公钥复制到服务器
方法一(推荐,命令一步到位):
ssh-copy-id 用户名@服务器IP
这条命令会自动把本地的公钥追加到服务器的 ~/.ssh/authorized_keys 文件中,输入一次密码后,以后再登录就不需要密码了。
方法二(手动配置):
- 先通过密码登录服务器。
- 修改SSH配置文件:
vim ~/.ssh/authorized_keys。 - 把本地
id_rsa.pub文件里的内容粘贴进去,保存退出。 - 设置权限:
chmod 600 ~/.ssh/authorized_keys,chmod 700 ~/.ssh。
修改SSH配置文件加固安全
编辑服务器上的 /etc/ssh/sshd_config 文件,做三处修改:
- 把
PasswordAuthentication yes改为PasswordAuthentication no,禁用密码登录。 - 把
PermitRootLogin yes改为PermitRootLogin prohibit-password,禁止root直接用密码登录。 - 确认
PubkeyAuthentication yes处于开启状态。
改完重启服务:systemctl restart sshd(CentOS/RHEL系)或 service ssh restart(Ubuntu/Debian系),之后你的服务器就只认密钥,不再接受密码登录了。
SSH连接不上服务器怎么排查
遇到连接失败别慌,按顺序排查,大部分问题出在这几个地方。
网络可达性排查
先看能不能ping通目标IP:
ping 192.168.1.100
ping不通,检查安全组规则、防火墙、网线链路。
云服务器的话,重点检查控制台里的安全组入方向规则,看看22端口是否放行。
端口连通性排查
ping通了但连不上,大概率是端口问题:
telnet 192.168.1.100 22
- 能连接到空的SSH banner(通常显示
SSH-2.0-OpenSSH...),说明端口通,问题在认证环节。 - 连接超时,说明防火墙或安全组拦截了端口。
- 连接被拒绝,说明SSH服务没监听,或者监听在非标准端口。
认证失败排查
确认用户名和密码无误,密码注意区分大小写,如果开启了密钥登录,检查服务器上authorized_keys文件的权限和内容。错误信息里 Permission denied (publickey,password) 是认证方式全被拒了,publickey,password 这串字段会提示你服务器接受了哪些认证方式。
查看SSH服务运行状态
登录服务器(云控制台的VNC或管理终端),执行:
systemctl status sshd
看到 active (running) 说明服务正常。监听端口 显示的是别的数字,记下来,下次连接时用 -p 参数指定。
mac系统ssh连接服务器的实操细节
Mac自带的终端(Terminal.app)本身就是全功能的SSH客户端,不需要额外安装任何软件,打开终端后,直接使用 ssh 用户名@服务器IP 即可。
Mac用户有几个细节值得注意:
- 密钥权限:新生成的私钥文件,Mac会默认设置为600权限,这是正确的,如果不小心改了权限,密钥会失效,提示
Permissions too open。 - 钥匙串集成:Mac可以把SSH密码保存在钥匙串中,配合
ssh-add命令能实现免密登录,使用Apple Silicon芯片的Mac,连接速度通常比老款机器快不少。 - 退出登录:在远程终端输入
logout或exit,返回本地提示符。长时间不操作,服务器可能会断开连接,这是正常的,重新连接即可。
SSH连接的高效用法与安全基线
使用别名简化连接
频繁连接同一台服务器,每次敲一长串命令太累,在 ~/.ssh/config 文件中配置主机别名:
Host myserver
HostName 192.168.1.100
User root
Port 22
IdentityFile ~/.ssh/id_rsa
保存后,直接输入 ssh myserver 就能连接,不用再记IP和用户名。
端口转发让远程资源本地化
SSH不仅能登录,还能转发端口,把远程服务映射到本地端口,比如远程服务器上有个MySQL在3306端口,但外部不能直接访问:
ssh -L 3306:localhost:3306 root@192.168.1.100
执行后,本地访问 localhost:3306 就等同于访问远程服务器的3306端口,非常适合管理数据库控制台。
安全基线建议
行业共识认为,SSH安全防护的核心是减少暴露面和认证风险:
- 禁用root密码登录,改用普通用户加
sudo提权。 - 修改默认22端口为高位数端口(如10224),降低被扫描的概率,但安全不能只靠改端口。
- 配置
fail2ban防暴力破解工具,连续输错密码自动封IP。 - 定期轮换密钥对,吊销离职人员持有的公钥。
- 使用
ssh -v参数调试连接过程,获取详细的连接日志,便于定位问题。
SSH连接服务器常见问题解答
问:ssh连接服务器时提示“Connection timed out”是什么原因?
答:数据包未到达目标服务器,或被中途拦截,先检查本地网络是否能正常访问外网,再检查安全组和防火墙是否放行22端口,最后ping一下服务器IP确认网关路径。
问:服务器改变了IP地址,之前保存的密钥指纹失效怎么办?
答:编辑本地 ~/.ssh/known_hosts 文件,删除对应IP所在行,或直接执行 ssh-keygen -R 新IP地址 清除旧指纹记录,然后重新连接并确认新指纹。
问:公司网络限制外网连接,能否通过跳板机中转?
答:可以,在本地SSH命令中加 -J 参数直连跳板机:ssh -J 跳板机用户名@跳板机IP 目标服务器用户名@目标服务器IP,这条链路的中间转发过程由SSH自动完成,无需额外配置代理软件。
SSH连接服务器的技术体系稳定成熟,只要掌握了密码登录、密钥配置、故障排查这三层能力,绝大多数远程管理场景都能从容应对,用好这套工具,服务器管理效率会大幅提升,安全风险也能控制在可接受范围内。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/752106.html





