拓之

拓之

如何SSH连接一台服务器(电脑)

2023-10-11
如何SSH连接一台服务器(电脑)

一、SSH是什么

这里借用维基百科的解释:安全外壳协议(Secure Shell Protocol,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。SSH通过在网络中建立安全隧道)来实现SSH客户端与服务器之间的连接。SSH最常见的用途是远程登录系统,人们通常利用SSH来传输命令行界面和远程执行命令。SSH使用频率最高的场合是类Unix系统,但是Windows操作系统也能有限度地使用SSH。2015年,微软宣布将在未来的操作系统中提供原生SSH协议支持,Windows10 1803版本已提供OpenSSH工具。SSH的经典用途是登入到远程电脑中执行命令。除此之外,SSH也支持隧道协议,端口映射和X11连接。借助SFTP或SCP协议,SSH还可以传输文件。

简单来说,ssh就是让你可以远程登录一台设备,来远程执行一些命令。

这个远程连接,可以连接各种各样的设备,实际上最常用到的是在我们连接linux服务器的时候,直接进行ssh连接即可对服务器进行一切操作,但是其实windows也是支持我们去ssh连接的,使用powershell就可以对远程设备进行连接,但是要连接到一台windows设备的话,还是需要我们去开启openssh的服务端,因为默认是关闭的。

那么,我们应该如何连接呢?

二、如何连接

首先,你要知道服务端也就是你要链接的呢台电脑的IP地址,而且只能是公网IP或者你局域网中的内网IP。一般购买云服务器之后都会告诉你一个公网IP,使用这个IP地址就可以连接到你的服务器。

IP地址:简单来说,IP地址就是每一台入网电脑的身份证号,但是由于现在全世界的人数太多,所以IP地址不够分了,不是每一台电脑都能分到公网的IP地址。比如一般家用电脑,他只会有一个你路由器分发的内网IP,所以导致我们不能在其他地方直接连接你家里的家用电脑。如果想要连接,我们就需要配置一些例如frp这样的工具,把你家用电脑的某个端口,映射到有公网IP的设备上,具体可以看这个frp教程

知道了IP地址之后,ssh连接就非常简单,只需要一条命令:

ssh user@host

其中,user表示你登录要使用的账户(服务端的账户),host表示服务端的IP地址

SSH服务的默认端口是22,也就是说,如果你直接以上面的命令连接的话,会自动连接到远程主机的22端口。如果你要链接的呢太服务端的ssh端口不是22的话,比如配置了frp内网穿透,我们可以使用 -p 选项来修改端口号,比如连接到服务器的6000端口:

ssh user@host -p 6000

如果是第一次登录远程主机,系统会给出一个公钥指纹的提示,就是说没见过这个设备,是否要继续链接,输入yes就可以了。

接着会让你输入密码,这里的密码就是服务端你连接的账户的密码,如下图所示

在你输密码的时候,不会显示任何东西,你只管放心输,完了按回车就好

回车之后,密码什么的都没问题,就会进入这个服务端的命令行窗口,你在这里操作,就相当于在本机上进行操作。

需要注意的是,如果要windows电脑,你首先要确保这台电脑开启了opensshd服务,也就是服务端服务。

首先需要用管理员身份启动 PowerShell,使用如下命令看一下,要确保 OpenSSH 可用于安装:

Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'

输出应该是类似的结果:

 Name  : OpenSSH.Client~~~~0.0.1.0
 State : NotPresent
 Name  : OpenSSH.Server~~~~0.0.1.0
 State : NotPresent

如果你安装过,那么应该两个State都是Installed,你就可以跳过后面的安装部分,直接连接了。

然后使用 PowerShell 安装服务,运行下面的命令 即可:

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

输出结果类似:

 Path          :
 Online        : True
 RestartNeeded : False

这样就可以完成 OpenSSH 的安装。

安装完成之后,就需要进行一些初始化配置了,还是以管理员身份,使用 PowerShell 执行即可。

首先需要开启 SSHD 服务:

Start-Service sshd

然后设置服务的自动启动:

Set-Service -Name sshd -StartupType 'Automatic'

三、免密登录(公钥登录)

这里对公私钥的概念不做介绍了,感兴趣的话可以自行百度一下。

之前的每次登录都会要求你输入密码,会比较麻烦,所以可以配置免密登录,这样每次登录直接就能连接,而不需要输入密码,步骤也很简单。

1.生成公钥和私钥

在命令行中输入:ssh-keygen

ssh-keygen

连续回车或者根据提示确定生成的私钥公钥存放的路径。默认(就是一路回车)会在C:/user/用户/.ssh目录下生成公钥和私钥。 id_rsa:私钥 id_rsa.pub:公钥

这个私钥就是你自己的钥匙,公钥就是你要给出去的钥匙。

2. 将公钥拷贝到服务器

  1. 在服务器命令行中输入 ssh-keygen回车(生成服务器的公私钥)

    • 完成后会在用户目录下生成 .ssh目录(输入 ls -a查看)

  2. 进入ssh目录 cd .ssh

  3. 将客户端的公钥(也就是刚刚在我们本地电脑生成的id_rsa.pub)添加到 authorized_keys文件:

    • 可以vim authorized_keys直接将Windows上自己生成的id_rsa.pub的内容拷贝过去 注意:如果没有 authorized_keys文件的话,用 touch authorized_keys创建一个,创建后权限改为 600

  • 如果是linux服务器也可以直接使用命令:

    ssh-copy-id -i <path_to_public_key> user@remote_server

    替换<path_to_public_key>为本地公钥文件的路径,user为远程服务器的用户名,remote_server为远程服务器的IP地址或主机名。这段命令会自动添加你本地的公钥到authorized_keys,并且如果authorized_keys文件不存在,则会自动创建。如果已存在,那么公钥将被追加到文件的末尾。

  • windows端没有快捷操作,需要手动去C:/user/用户/.ssh目录中,有一个authorized_keys文件,注意这里是没有后缀名的,如果没有就自己创建一个,然后把在客户端生成的公钥,也就是id_rsa.pub里面的内容,全部复制到authorized_keys最后面,注意是全部,不要忘了rsa。

之后再继续增加免密登录的设备的话,就继续往authorized_keys文件中复制公钥就可以了。

4. 重启ssh服务

linux端直接执行下面的命令

systemctl restart sshd

window端就去计算机管理,找到里面的服务,然后找到之前安装的openssh服务端,右键重启他就可以了

配置好之后,链接时就可以不用输入密码了。

其实github的ssh连接也是类似的,把你的公钥拷贝到github的设置中就可以喽~~