详解如何SSH远程登录自己的Linux服务器

本文最后更新于 2023年9月17日 上午

嗷~~头图不能少

现在,更多的网站使用Nginx充当Web服务器并部署为LEMP环境。

即使是Java Web项目,通常也会使用Nginx进行端口反向代理,而Nginx的兼容和稳定性,Linux远远好于Windows Server。

另外一方面,Linux配合软件包管理器(yum、apt等),可以十分方便地安装好基本软件,现在还有Docker容器工具,如果是功能性模块,用Docker即可。

还有一些公认的原因:

  • 开源,可以轻松查看用于创建Linux内核的可用代码,还可以修改代码以修复任何错误或定制话需求后自行编译等;
  • 稳定性很好,系统不容易崩溃或者卡死(Windows的稳定性,这几年……);
  • 安全性能好;且系统性问题少。
  • 操作方便,对计算机专业人士来讲,几条Shell命令就可以执行很多的操作,比Windows Server的图形化控制好很多。

虽然Linux没有图形化界面、大部分新用户没有使用过,但是……我还是极度推荐服务器使用Linux。

那么,小白用户,买了服务器后,如何远程连接自己的Linux服务器呢?

Windows Server Or Linux Server?

紧急推荐

紧急、限时推荐【强烈推荐】:

一年74!!

2C 4G 8M基本可以满足当下个人需求(如:网站、MC服务器等)。

4C 8G 10M基本是个人服务器配置的顶峰。

上面两个服务器,选择Debian或CentOS系统,是练手Linux的绝佳设备嗷。

视频教程

和以前一样,我们觉得有用、有必要录个视频的内容,我们还是会花时间做个视频:

感觉有用,可以给视频投个币么?( ´▽`):视频原链接:https://www.bilibili.com/video/BV1cL411w7RB

另外,接受打赏和捐赠嗷:爱发电:Mintimate

远程登录

本次的分享不为别的,就是讲解Linux服务器的入门使用:远程登录服务器

  • 推荐使用SSH(OpenSSH)进行远程登录,安全性高,且更加方便。
  • 不推荐使用telnet进行远程登录,所以本次就教大家用SSH多种方法登录。

这次文章就教大家使用SSH“开启”服务器的大门。

本次教程,远程服务器主要有两个方面:

  • 密钥登录:使用SSL(OpenSSH和OpenSSL)生成的私钥和公钥进行配对登录(免密)。
  • 账号登录:使用用户密码进行登录。

客户端推荐

因为要使用SSH远程连接服务器,需要端对端的加密通信,进而需要SSL函数、SSH的客户端支持。

推荐的SSH客户端:

  • Windows【自带工具】:Win10可以使用Powershell,Win11可以使用Windows Terminal,这两个都是自带的工具。
  • Linux&macOS【自带工具】:Linux和macOS,使用自带的Terminal即可。
  • Android【非自带】:推荐使用termius
  • iOS【非自带】:推荐使用termiusServerCat

macOS上的Terminal

SSH

Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议。可在不安全的网络中为网络服务提供安全的传输环境(基于SSL实现)。

SSH最常见的用途是远程登录系统,人们通常利用SSH来传输命令行界面和远程执行命令。

我们平时使用的SSH,一般是OpenSSH,基于OpenSSL实现。

Windwos10、macOS、Linux均采用OpenSS和OpenSSH方案。

Opt1:账号登录

首先我们介绍一下账号登录,账号登录的好处:

  • 相当于账号和密码登录,账号登录更方便于多平台和多用户使用同一个账号登录。

我们新买的服务器,一般都是有安装OpenSSH和OpenSSL的,其中OpenSSH依赖于OpenSSL。所以,只需要设置用户名对应的密码后客户端(本地电脑)就可以连接了。

设置密码

如果你是云服务器,在还没有登录前,需要先重置一次密码。比如:腾讯云服务器控制台内:

重置密码

用云服务器厂商提供的接口重置自己服务器密码后,服务器密码后会自动重启,这样密码就设置好了。

如果你是局域网内Linux(比如:树莓派、VMware内Linux虚拟机等);

那么就不需要设置密码了,密码就是你平时登录的账号密码,但是注意查看是否有安装OpenSSL和OpenSSH:

1
2
3
4
# 查看OpenSSL
openssl version
# 查看SSH
ssh -V

查看版本

没有安装,可以用户软件包管理器安装。

PS: 如果你使用腾讯云lighthouse,可以用用lighthouse户去设置(重置)密码,也很简单,在控制台内选择:
选择“一键登录”
这个时候,我们会登录腾讯云默认用户:lighthouse,在此界面使用su命令切换到root用户(也可以切换到其他用户):

1
sudo su - root

切换用户

之后,我们可以使用passwd命令,重置用户密码:

重置密码

密码会自动隐藏哦,盲输后回车即可。

允许远程登录

之后,我们需要允许服务器的SSH(OpenSSH)远程登录。

需要注意,如果你是使用腾讯云的控制台,进行重置密码,那么重置后,腾讯云会帮你配置好SSH(OpenSSH)远程登录,无需进行本次操作。

编辑文件/etc/ssh/sshd_config:

1
2
# 当前为root用户,非root用户请添加sudo
vim /etc/ssh/sshd_config

编辑sshd_config

之后,添加PasswordAuthentication=yes。保存并退出即可。

如果你并不知道Vim的操作,建议参考文章终端文本编辑神器–Vim命令详解。如何配置Vim以及Vim插件?

最后,重启OpenSSH,使其生效:

1
2
# 当前为root用户
systemctl restart sshd

到此,SSH账号登录的服务器端,服务器(被连接端)配置完成。接下来,我们就可以使用客户端连接了。

连接Linux

现在,我们就可以本地连接服务器。假设:

  • 我的Linux服务器IP是:192.168.3.241
  • 我的服务器是Debian/CentOS
  • 需要远程登录的账号为root

那么我的SSH连接命令就是:

1
ssh root@192.168.3.241

macOS上Terminal操作

Windows上Windows Terminal操作

出现Are you sure you want to continue connecting (yes/no/[fingerprint])?后,输入yes并回车,这个时候输入刚刚设置的密码即可连接:

输入密码后,成功连接

注意:输入密码时,密码自动隐藏,盲输后回车即可。

到此 ,我们的服务器就连接成功了:

服务器连接成功

Opt2:密钥登录

接下来,我们介绍如何使用密钥进行登录,这也是我喜欢的远程登录方式,主要原因:

  • 安全性高:相对于密码的长度和复杂度,私钥长度默认为2048位,与公钥进行匹配,安全性极高
  • 方便:使用密钥登录,私钥和公钥自动匹配,无需输入密码即可登录。(GitHub、Gitee等的免密Git,也是使用密钥进行验证)

OpenSSH密钥登录

为实现密钥登录,我们只需要客户端生成私钥和公钥后,将公钥放置到服务器上,在使用SSH连接时,会自动进行匹配验证,并完成登录

客户端生成密钥

macOS和Linux通常自带OpenSSH和OpenSSL(Windows在Win10以后,也自带OpenSSH和OpenSSL)

所以我们直接使用Terminal进行密钥生成:

1
ssh-keygen -t rsa -C "youremail@domain.com"

其中,youremail@domain.com为你的电子邮箱,不需要制定邮箱可以简化为:

1
ssh-keygen

macOS/Linux使用Terminal

Windows使用Windows Terminal

其中:

  • Enter file in which to save the key:密钥存放地址,默认为当前用户目录下的.ssh文件夹下。
  • Enter passphrase:保护私钥的密码,一般留空,直接和上面一样回车即可。
  • Enter same passphrase again:确认私钥密码(不解释了……)

生成后,进入用户名文件夹即可看到我们生成的密钥:

生成的密钥

其中:

  • id_rsa:生成的私钥,保留在电脑即可。
  • id_rsa.pub:生成的公钥,打开后,复制内容,后文部署到服务器上。

公钥内容

服务端部署公钥

现在,我们就可以部署公钥到服务器了,服务器一般都可以直接部署公钥,和GitHub、Gitee一样

比如:腾讯云控制台的一键部署:

绑定密钥

之后,到控制台上部署即可:

腾讯云绑定密钥

当然,通用方法是先客户端登录服务器:

登录服务器

之后,进入.ssh文件夹内(如果没有就使用mkdir命令创建),并使用vim创建并编辑authorized_keys文件:

1
2
cd .ssh
vim authorized_keys

之后粘贴公钥即可:

粘贴公钥

到此,保存并退出即可:

保存并退出到主终端

到此,SSH密钥登录的服务器端,配置完成。接下来,我们就可以使用客户端连接了。

authorized_keys内,可以添加多个客户端的公钥,一行一个,或者换行隔开即可。

客户端远程连接

和刚刚一样,我们使用ssh命令就可以连接,假设我的服务器IP是:192.168.3.241,我的服务器是Debian/CentOS,默认用户为root:

1
ssh root@192.168.3.241

但是这个时候就可以看到,不用输入密码了:

无密码连接

Q&A

当然,这是一篇入门教程,新手总是会碰到一些问题。这里就解答一下常见的问题:

REMOTE HOST IDENTIFICATION HAS CHANGED!

出现:

1
2
3
4
5
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!

出现错误

一般出现这个错误,发生在你服务器重置后。主要是服务器的解析值不一样了,我们需要删除旧的(OpenSSH)解析值,需要删除的地址,上面已经写了:

旧的解析值所在地址

打开上述文件,删除旧记录值:

删除

删除后,即可重新连接:

重新连接

Ubuntu等允许Root远程登录

如果你选择的是腾讯云Ubuntu系统:

腾讯云Ubuntu系统

默认,你只能使用ubuntu这个用户进行登录;但,如果你想直接使用root用户进行远程登录,也不是不可以。

编辑/etc/ssh/sshd_config这个文件,在文末添加:

1
PermitRootLogin yes

添加配置

之后,保存并重启ssh服务:

1
systemctl restart sshd

之后,就可以使用root用户进行登录了。

Permission denied (publickey).

如果SSH远程连接的时候,出现Permission denied (publickey).错误:

出现错误

其实看字面意思就可以理解了:权限不允许(公钥);意思就是,你电脑的私钥对应的公钥,并不在服务器的。两个解决方法:

  • 服务器上,在用户authorized_keys文件内,添加设备的公钥,具体操作可以看上文。
  • 服务器上,在/etc/ssh/sshd_config内,添加PasswordAuthentication=yes,具体操作也可以看上文。

设置了authorized_keys,还是无法密钥登录?

设置了authorized_keys,还是无法密钥登录?这个可以依次排查:

  • OpenSSH的配置文件(/etc/ssh/sshd_config)内,是否有允许密钥登录。
  • 服务器上,用户文件夹(“家”目录)下的.ssh文件夹和authorized_keys权限是否正确,所属用户是否正确。
1
2
3
当前为root用户
drwxr-xr-x 2 root root 4.0K Dec 1 10:28 .ssh
-rw-r--r-- 1 root root 576 Dec 1 10:28 authorized_keys

文件和文件夹权限

END

到此,Linux远程连接就是这些嗷。总的来说,方法很多,不过这篇文章,足够各位入门了吧。嘿嘿,大家不要忘记点赞和收藏、分享嗷。

大佬

另外,不建议使用Linux桌面环境,如果有Linux桌面需求,需要在腾讯云服务器上安装Linux桌面环境,参考:



详解如何SSH远程登录自己的Linux服务器
https://www.mintimate.cn/2021/12/03/connectToLinux/
作者
Mintimate
发布于
2021年12月3日
许可协议