在Linux系统中,登录服务器是日常运维和开发的核心操作,其中最常用且安全的方式是通过SSH(Secure Shell)协议实现,SSH通过加密传输数据,确保了通信的安全性,避免了传统Telnet等明文协议的风险,本文将详细介绍Linux下登录服务器的多种方法、步骤及注意事项,帮助用户高效、安全地完成远程连接。

SSH协议与登录准备
SSH协议工作在传输层之上,支持加密认证和安全的远程会话,登录服务器前,需确保以下条件:
- 服务器端已启用SSH服务:大多数Linux发行版默认安装OpenSSH服务,若未安装,可通过
sudo apt install openssh-server(Ubuntu/Debian)或sudo yum install openssh-server(CentOS/RHEL)安装,并启动服务(sudo systemctl start sshd)。 - 客户端工具:Linux/macOS系统自带SSH客户端(
ssh命令);Windows系统需使用第三方工具,如PuTTY、Xshell、MobaXterm或WSL(Windows Subsystem for Linux)。 - 连接信息:服务器的IP地址(或域名)、SSH端口(默认22)、用户名(如root、普通用户)。
用户名密码登录(基础方式)
这是最简单的登录方式,通过用户名和密码进行身份验证,适合临时或低安全需求场景。
Linux/macOS系统使用ssh命令
打开终端,执行以下命令:
ssh [用户名]@[服务器IP] -p [端口号]
- 示例:
ssh root@192.168.1.100 -p 22(以root用户登录,默认端口22)。 - 若端口号为默认22,可省略
-p参数。
执行命令后,首次连接会提示服务器密钥指纹(The authenticity of host ‘192.168.1.100’ can’t be established…),输入yes确认,随后输入用户密码即可登录。
Windows系统使用PuTTY
(1)下载并安装PuTTY(官网:https://www.putty.org/)。
(2)打开PuTTY,在“Session”页面输入服务器IP地址、端口号(默认22),选择连接类型为“SSH”,输入保存的会话名称(可选),点击“Open”。
(3)首次连接会弹出“Security Alert”窗口,点击“Accept”确认。
(4)输入用户名和密码,按回车即可登录。
SSH密钥登录(安全方式)
密钥登录通过公钥加密和私钥解密实现认证,无需传输密码,安全性更高,适合长期运维或自动化场景。
生成SSH密钥对
在客户端机器上执行以下命令生成密钥对(默认存放在~/.ssh/目录):

ssh-keygen -t ed25519 -C "your_email@example.com"
-t ed25519:指定密钥类型(ED25519比RSA更安全高效,也可选-t rsa -b 4096)。- 提示输入保存路径(直接回车使用默认路径
~/.ssh/id_ed25519)和密码(可选,用于加密私钥,增强安全性)。
执行后,会生成私钥(id_ed25519)和公钥(id_ed25519.pub)。
上传公钥到服务器追加到服务器的~/.ssh/authorized_keys文件中(该文件记录允许登录的公钥):
- 方法1:使用
ssh-copy-id命令(推荐,自动处理权限):ssh-copy-id -i ~/.ssh/id_ed25519.pub [用户名]@[服务器IP]
执行后输入服务器密码,公钥会自动上传。
- 方法2:手动上传(适用于
ssh-copy-id不可用时):# 从客户端复制公钥内容 cat ~/.ssh/id_ed25519.pub # 登录服务器(临时密码登录),创建authorized_keys文件并粘贴公钥 mkdir -p ~/.ssh echo "粘贴的公钥内容" >> ~/.ssh/authorized_keys chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
密钥登录测试
退出当前登录,执行以下命令(无需输入密码):
ssh -i ~/.ssh/id_ed25519 [用户名]@[服务器IP]
若设置了私钥密码,需输入私钥密码。
SSH登录高级场景
修改默认SSH端口
为提升安全性,可修改服务器默认SSH端口(如改为2222):
- 编辑SSH配置文件:
sudo vi /etc/ssh/sshd_config。 - 修改
Port 22为Port 2222,保存退出。 - 重启SSH服务:
sudo systemctl restart sshd。 - 客户端登录时需指定端口:
ssh -p 2222 [用户名]@[服务器IP]。
通过跳板机(中间服务器)登录
若目标服务器无法直接访问,需通过跳板机中转:
- 方法1:SSH代理转发(推荐):
ssh -J [跳板机用户]@[跳板机IP]:[端口] [目标服务器用户]@[目标服务器IP]
示例:
ssh -J jumpuser@192.168.1.10:22 targetuser@192.168.1.200。
- 方法2:分步登录(先登录跳板机,再登录目标服务器)。
解决SSH连接超时/断线
- 设置心跳包:在客户端配置文件
~/.ssh/config中添加:Host * ServerAliveInterval 60 ServerAliveCountMax 3
表示每60秒发送一次心跳包,超时3次后断开连接。
- 使用tmux/screen:登录后启动tmux(
tmux new -s session_name),即使终端关闭,会话仍可保持。
SSH常用参数说明
| 参数 | 作用 | 示例 |
|---|---|---|
-p |
指定SSH端口 | ssh -p 2222 user@192.168.1.100 |
-i |
指定私钥文件 | ssh -i ~/.ssh/id_rsa user@192.168.1.100 |
-v |
详细输出(调试用) | ssh -v user@192.168.1.100 |
-l |
指定用户名(可写在IP前) | ssh -l root 192.168.1.100 |
-o |
设置SSH选项(如端口转发) | ssh -o "ProxyCommand nc -X 5 192.168.1.10 22" user@192.168.1.100 |
-N |
不执行远程命令(仅用于端口转发) | ssh -N -L 8080:localhost:80 user@192.168.1.100 |
相关问答FAQs
Q1: SSH登录时提示“Permission denied (publickey,password)”怎么办?
A: 该错误通常由以下原因导致:
- 密钥未正确上传:检查服务器
~/.ssh/authorized_keys文件是否包含客户端公钥,并确保文件权限为600(chmod 600 ~/.ssh/authorized_keys)。 - 私钥路径错误:登录时通过
-i参数正确指定私钥文件路径(如ssh -i ~/.ssh/id_ed25519 user@192.168.1.100)。 - 服务器SSH配置限制密码登录:检查
/etc/ssh/sshd_config中PasswordAuthentication no是否被修改为yes(若需密码登录),或PubkeyAuthentication yes是否启用。 - 密钥类型不匹配:确保客户端生成的密钥类型(如ED25519)与服务器支持的类型一致。
Q2: 如何通过SSH实现本地端口转发(访问远程服务)?
A: 端口转发可将本地端口流量通过SSH隧道转发到远程服务器,常用于访问远程数据库或内网服务,语法如下:
ssh -L [本地端口]:[远程目标地址]:[远程端口] [用户名]@[服务器IP]
- 示例:本地通过
localhost:3306访问远程服务器192.168.1.100的MySQL服务(3306端口):ssh -L 3306:localhost:3306 root@192.168.1.100
执行后,本地使用
mysql -h localhost -P 3306即可连接远程MySQL。 - 动态转发(SOCKS代理):
ssh -D 1080 user@192.168.1.100,本地配置代理为localhost:1080,可访问远程内网资源。
通过以上方法,用户可根据场景需求选择合适的SSH登录方式,确保远程连接的安全性和稳定性,密钥登录是推荐的主流方案,配合端口转发、跳板机等功能,可灵活应对复杂的网络环境。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/32942.html