登录本机SSH服务器,核心就一句话:在本机终端执行ssh 用户名@localhost,前提是SSH服务已安装并启动,下面按不同系统和场景拆解完整步骤。
开始之前:本机SSH环境检查
SSH登录本机和远程登录的区别在于目标地址写成了localhost或0.0.1,但流程完全一致,很多教程默认读者已有SSH服务端,新手常在这一步卡住。
确认SSH服务端是否安装
在终端输入以下命令检测服务是否在运行:
systemctl status ssh
若看到Active: active (running),直接跳到下一节,若提示Unit ssh.service could not be found,说明还没安装服务端。
不同系统的安装命令
| 系统 | 安装命令 | 服务启动命令 |
|---|---|---|
| Ubuntu/Debian | sudo apt install openssh-server |
sudo systemctl start ssh |
| CentOS/RHEL | sudo yum install openssh-server |
sudo systemctl start sshd |
| Windows 10+ | 系统设置→应用→可选功能→添加“OpenSSH 服务器” | Start-Service sshd |
| macOS | 系统设置→通用→共享→开启“远程登录” | sudo systemctl start ssh(如可用) |
安装完成后务必执行两次检查:先看版本ssh -V确认客户端存在,再看监听端口ss -tlnp | grep 22确认服务端已就位。
最快路径:用ssh命令连接localhost
环境就绪后,打开终端执行以下任一命令:
ssh localhost ssh username@localhost ssh username@127.0.0.1 -p 22
第一条命令默认使用当前系统用户名登录,若当前用户不是目标账户,则用第二条指定用户名,首次连接会弹出Are you sure you want to continue connecting?的密钥指纹确认提示,输入yes回车即可。
登录后验证是否成功
提示符前面变成username@主机名:~$格式,说明已经进入了本机的SSH会话,此时执行hostname或whoami,返回的结果应与当前系统一致。
密码认证与密钥认证的选择
- 密码登录:直接输入账户密码,适合偶尔使用。
- 密钥登录:先执行
ssh-keygen -t rsa生成密钥对,再用ssh-copy-id localhost把公钥追加到~/.ssh/authorized_keys,适合频繁登录的场景。
行业共识认为,密钥认证比密码认证安全得多,尤其当你的本机暴露在公网时,只启用密钥认证能挡住绝大多数暴力破解。
本机SSH服务器登录的常见场景
实际使用中,“本机SSH”并不只是终端敲一条命令那么简单,以下几个场景出现频率最高。
同一台电脑从WSL登录Windows
Windows上启用OpenSSH Server后,在WSL(Windows Subsystem for Linux)里执行:
ssh 用户名@$(hostname).local
若主机名解析失败,用ipconfig查到的IPv4地址替换,需要注意Windows用户名可能带空格,例如ssh "D:\\Users\\Zhang San"@localhost,这里用引号把带空格的用户名包起来。
从另一台设备登录本机
本机IP地址使用ip addr(Linux/macOS)或ipconfig(Windows)查看,然后在另一台设备上执行:
ssh 用户名@192.168.x.x
同一局域网下,这个方式通常不用改防火墙,跨网段或VLAN环境需检查路由策略。
macOS之间互相SSH
macOS开启“远程登录”共享后,另台Mac的访达里按Cmd+K,输入ssh://用户名@IP即可,命令行方式则与Linux完全一致。
ssh localhost登录不了?排查这套就够了
很多用户卡在“明明装了服务端,但本地登录就是失败”,按以下顺序排查,多数情况下几步就通。
第一步:看端口是否被占用
ss -tlnp | grep 22
若没有输出,说明sshd没起来,执行sudo systemctl restart ssh重启,若端口显示0.0.0:22被其他程序占用,先杀掉冲突进程,或改/etc/ssh/sshd_config里的Port选项。
第二步:检查防火墙
Ubuntu用户执行sudo ufw status,CentOS用户执行sudo firewall-cmd --list-all,若22端口被拦,放行命令分别是sudo ufw allow 22和sudo firewall-cmd --add-port=22/tcp --permanent,Windows用户需在“高级安全Windows Defender防火墙”里确认“OpenSSH Server”入站规则已启用。
第三步:验证公钥权限
若要使用密钥登录却一直要密码,检查文件权限:~/.ssh目录应为700,~/.ssh/authorized_keys应为600,权限过宽时SSH会出于安全考虑拒绝加载密钥。
第四步:查看详细日志
排查任何SSH问题,-v参数都是利器:
ssh localhost -v
输出里找到debug1: Next authentication method这一行,它会告诉你卡在密码还是密钥环节,若看到Permission denied (publickey,password),则重点关注服务端日志:journalctl -u ssh -n 50。
Windows系统SSH登录本机的差异点
Windows 10 1809之后自带OpenSSH,但默认只安装客户端,服务端需手动启用,在“设置→应用→可选功能→添加功能”里找到“OpenSSH服务器”安装后,还需执行以下操作:
以管理员身份打开PowerShell 2. 执行 Start-Service sshd 3. 执行 Set-Service -Name sshd -StartupType Automatic
Windows防火墙会弹出提示,必须勾选“专用网络”允许访问,否则本机连接也可能被拦,使用密码登录时,Windows账户密码是登录凭据;使用密钥登录,需将公钥放入C:\ProgramData\ssh\administrators_authorized_keys,而不是用户目录下的.ssh文件夹,这是Windows SSH和Linux最大的权限差异。
安全加固建议
既然SSH服务已经跑在本机,至少做好以下措施再长期开启:
- 修改默认端口:编辑
/etc/ssh/sshd_config里的Port 22为高位端口如22026,再sudo systemctl restart ssh。 - 禁用root登录:设置
PermitRootLogin no。 - 限制可用用户:在配置末尾添加
AllowUsers 你的用户名。 - 启用Fail2Ban:Ubuntu执行
sudo apt install fail2ban,能对反复尝试密码的行为自动封禁IP。
据安全机构近年统计,互联网上针对22端口的恶意扫描每天在数百万次级别,尤其当你连的是云服务器而非纯本机时,禁用密码登录比任何防火墙都管用。
常见问题解答
SSH登录本机需要公网IP吗?
不需要,本机SSH走的是回环地址,只要服务端在运行,ssh localhost就能连通,与是否有外网IP无关,若想让外部设备连入,才需要局域网IP或端口转发。
每次登录都要输密码怎么办?
使用密钥登录并指定密钥路径:ssh -i ~/.ssh/id_ed25519 localhost,若想彻底免密,把公钥追加到authorized_keys后,再在~/.ssh/config添加Host localhost的快捷配置,之后直接打ssh localhost即可。
登录后看不到命令行提示符?
检查是否误进了SFTP子系统,正常SSH登录会进入Shell环境,若卡在sftp>提示符下,说明服务端配置里把用户的Shell设置成了/sbin/nologin,修改该用户的Shell为/bin/bash即可恢复。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/784117.html


