虚拟机Ubuntu向主机Windows建立SSH连接,跨系统传输

目录

关于SSH

SSH的诞生

SSH起源与发展

SSH常用认证方法

SSH配置

Ubuntu下

Ubuntu安装SSH服务端

在Windows上配置SSH

在Ubuntu中建立SSH连接

(一)密码认证

(二)密钥认证

1. 在虚拟机上生成SSH密钥对

工具——terminus

跨系统传输文件命令

问题

忘记密码

SSH可能出现的问题


        1. 简单介绍了SSH的来源与发展。

        2. 在SSH配置中,主要展示了密码认证。如果配置出现不可预估的错误或者想要方便快捷,可以考虑使用SSH工具——termius。

        3. 介绍了两个跨系统传输文件的命令。

关于SSH

SSH的诞生

        在SSH诞生之前,网络主机之间的通信普遍采用明文通信方式,任何位于传输路径上的设备都可以读取这些数据。

        尤其在远程登录和网络服务领域。远程登录和网络服务通常使用如rlogin、TELNET、FTP和rsh等协议。这些协议在传输数据时并不加密,特别是服务器登录过程,用户输入的密码需要在网络上明文传输到服务器,使得数据容易受到嗅探和篡改等攻击。

        芬兰赫尔辛基工业大学的研究员 Tatu Ylönen 所在的大学网络一直发生密码嗅探攻击,因此他想为服务器设计一个更安全的登录方式。1995年,他设计了 SSH 协议的第一个版本(现称为 SSH 1),同时写出了第一个实现(称为 SSH1)。

        

       (该图片来源于网上)

        

        SSH (Secure Shell)协议是一种安全远程登录服务器的协议。它通过密钥交换机制(如Diffie-Hellman密钥交换)计算一个共享密钥,并基于这个密钥建立一个与服务器通信的安全通道。用户通过安全通道使用一种可接受的身份验证方法进行身份验证。常用的认证方法包括“密码”和“公钥”。顾名思义,如果是“密码”方式,要求用户提供自己的密码即可进行认证。而“publickey”验证则依赖于用户持有的私钥和服务器上的公钥进行身份验证。公钥验证通常被认为更安全,因为它不依赖于在网络上传输密码,减少了密码被截获的风险。

SSH起源与发展

       当时, SSH 1的发布迅速得到了广泛的认可和使用。由于其加密和身份验证功能,SSH 1能够替换那些不安全的远程登录和网络服务协议,如rlogin、TELNET、FTP和rsh等。到1995年底,SSH的用户已经遍布50个国家,达到了20,000个。然而,随着SSH的普及和使用,人们开始发现SSH 1协议中存在一些安全漏洞。这些漏洞促进了SSH 2的诞生。

        为了修复SSH 1中的安全漏洞并提供更强大的功能,Tatu Ylönen在1996年提出了SSH 2协议(或称为SSH 2.0)。SSH 2与SSH 1并不兼容,但在安全性、功能性和性能方面都进行了改进。SSH 2协议在1997年进行了标准化,并在1998年推出了软件实现SSH 2。此后,SSH主要有两个版本——SSH 1和SSH 2。不过,那时官方的SSH 2软件是一个专有软件,需要付费使用,并且没有提供SSH  1的一些功能。限制了SSH 2的普及和使用。

        1999年,OpenBSD 的开发人员决定写一个 SSH 2 协议的开源实现,这就是 OpenSSH 项目。该项目最初是基于 SSH 1.2.12 版本,那是当时 SSH1 最后一个开源版本。但是,OpenSSH 很快就完全摆脱了原始的官方代码,在许多开发者的参与下,按照自己的路线发展。OpenSSH 随 OpenBSD 2.6 版本一起提供,以后又移植到其他操作系统,成为最流行的 SSH 实现。

        目前,Linux 的所有发行版几乎都自带 OpenSSH。

        到2024年6月29,根据互联网扫描服务shodan报告,在网络空间中发现了超3000万个基于SSH的活跃服务。(可以到shodan官网康康)

SSH常用认证方法

SSH(Secure Shell)提供了几种不同的认证方式,其中最常见的是密码认证和密钥认证。

  1. 密码认证
    • 原理:用户在连接时输入用户名和密码,密码会被传输到远程服务器进行验证。如果密码正确,用户将被授权访问远程服务器。
    • 优点:密码认证是最简单直接的认证方式,用户只需记住密码即可。
    • 缺点:密码在网络中传输,可能面临被嗅探的风险,且容易受到中间人攻击或暴力破解攻击,尤其是针对弱密码。
  2. 密钥认证
    • 原理:用户生成一对密钥,包括公钥和私钥。公钥存储在服务器上的授权文件中,而私钥则保存在用户的本地计算机上。当用户尝试连接时,服务器会要求提供与公钥匹配的私钥进行验证。
    • 优点:相比密码认证,密钥认证更加安全,因为私钥不会在网络上传输,降低了安全风险。
    • 缺点:用户需要生成密钥对,并在首次连接时将公钥上传到服务器,这可能需要额外的配置步骤。

除了上述两种主要认证方式外,SSH还支持其他认证机制,如使用单一登录(SSO)系统、基于硬件的令牌或多因素认证等,这些方式通常用于增强安全性,但在日常使用中不如密码认证和密钥认证普遍。

SSH配置

Ubuntu下

默认情况下,ssh服务不开启(用“sudo systemctl status sshd”查看ssh服务)

查看一下有没有装ssh(当然,目前,Linux 的所有发行版几乎都自带 OpenSSH)

dpkg -l | grep ssh

 如果没有就用apt安装

sudo apt update sudo apt install openssh-server

我这里显示有装客户端(client--客户端)

SSH 客户端用于“发送”连接请求到 SSH 服务器,而 SSH 服务器则“接收”这些请求,并允许用户通过加密的 SSH 会话远程访问计算机。

Ubuntu安装SSH服务端

1、执行安装指令

sudo apt update sudo apt install openssh-server

中途提示:

您希望继续执行吗? [Y/n] y

输入y即可

2、检查ssh服务器状态:

sudo systemctl status sshd

这会就开启服务了——active(running)就没毛病

如果一切正常,应该会看到服务正在运行的消息(如上)。如果服务没有自动启动,可以使用以下命令来启动服务:

sudo systemctl start sshd

在Windows上配置SSH

1、在Windows中安装openssh

在windows设置中

点击应用

有个“可选功能”

搜索“openssh服务器”(选择客户端还是服务器看个人需求)

我这里在Ubuntu中的是Client,那在Windows上装server的

2、确保openssh服务已开启

可以win+R打开运行框,输入:services.msc

services.msc

找到opensssh,右键点击属性

将启动类型修改成自动

修改后成自动开启服务

改成自动服务后,但是要进行一次手动开启,之后电脑重启后才会自动开启该服务

3、允许openssh通过防火墙:

搜索“Windows安全中心”,在安全中心中点击“允许应用通过防火墙

点击“更改设置”

修改

openssh服务器的配置文件通常位于:C:\ProgramData\ssh\sshd_config,视具体情况决定要不要修改。

在Ubuntu中建立SSH连接

(一)密码认证

首先需要知道命令格式。

ssh user_name@your_ip

1、user_name 你要连接的用户名

2、 your_ip 你要连接的设备的ip地址

比如这里我要连接的是我的Windows主机,那我就需要知道Windows的用户名(user_name)和ip(your_ip)

可以在Windows的cmd中查看用户名:

echo %USERNAME%

查看ip

ipconfig

就是IPv4后面跟着的ip地址(我这里没有透露我的ip)

好了,可以正式开始建立SSH连接了。

所以,我们可以在Ubuntu的终端中输入以下格式命令(换成自己的用户名和ip):

ssh user_name@your_ip

这个提示是在SSH协议为了保护我们的连接,会在你第一次连接到某个服务器时,显示该服务器的公钥指纹,并要求你确认是否继续连接。

所以,我们可以输入"yes"

然后提示说输入你的(密码(Ubuntu中输入命名不显示点或者星号是正常的)

这个密码似乎就是你进入Windows系统的密码,如果忘记了,下面有更改教程

如下,成功!

输入exit;可以退出,回到本地:

(二)密钥认证

1. 在虚拟机上生成SSH密钥对

如果你还没有SSH密钥对,你需要在虚拟机上生成一个。使用ssh-keygen命令来生成一串位数为4096的密钥:

ssh-keygen -t rsa -b 4096

输入这个命令后,一般连续输入enter就行

这会生成一个公钥(id_rsa.pub)和一个私钥(id_rsa)。私钥应该保持私密,不与任何人共享,而公钥则应该被复制到你想从中进行SSH连接的其他机器上。

2. 将公钥复制到主机上

  • 在虚拟机上的复制公钥的内容。

        在虚拟机的主目录下,一般是不显示配置文件的:

按下Ctrl + H,可以显示隐藏的文件:

.ssh下的id_rsa.pub是公钥的地方

  • 在Windows上,.ssh下的authorized_keys文件(这个文件如果不存在,就创建一个)。这个文件通常位于C:\Users\username\.ssh\authorized_keys
  • 一串公钥占一行,不能有多余的换行符

之后在Ubuntu中再次尝试ssh连接。

在进行连接的时候,可能会因为配置文件的问题出现错误,我的建议是,使用工具,节省生命。

工具——termius

我的建议是,使用一款优秀的工具,就是节省生命。

介绍一款SSH工具——termius。

termius下载(Linux版)icon-default.png?t=N7T8https://www.termius.com/free-ssh-client-for-linux

下载后,在termius压缩包界面:

使用以下命令安装:

sudo dpkg -i Termius.deb 

如上,安装完毕。

点击左下角的系统图标可以找到:

找到termius后,打开

1. 在Hosts栏中,点击NEW HOST

2. 编辑,输入IP和密码

3. 根据提示输入就行

4. 成功进入了

跨系统传输文件命令

  1. 使用scp命令

命令格式:

scp  %本地路径  username@remote_host:%远程目标路径

其中:

  •  username是你的远程用户名        
  •  remote_host是你的远程用户的ip     

例如:

       如果想将远程电脑上的文件下载到本地,可以使用

scp username@remote_host:%远程路径  %本地目标路径

        2. 使用SFTP

不过,Windows命令提示符(CMD)或PowerShell本身不直接支持SFTP的getput命令

sftp username@remote_host

  其中:

  •  username是你的远程用户名        
  •  remote_host是你的远程用户的ip        

建立sftp请求后,就可以直接使用put方法将文件传输到远程主机上

语法:

put %本地路径  %远程目标路径

例如:

从远程到本地使用get方法:

get  %远程路径  %本地目标路径

问题

忘记密码

如果忘记了,更改密码:
1、Win+R打开运行框

2、双击进入用户

3、选中你要修改的用户右键,我这里是右键“Anastasia”,点击设置密码

SSH可能出现的问题

一般出现问题:

  1. SSH服务未运行:远程主机上的SSH服务可能没有运行或配置不正确。
  2. SSH配置问题:远程主机上的SSH配置可能限制了您的连接,或者使用了不同的端口、用户认证方式等。
  3. 防火墙/安全组问题:远程主机可能有防火墙或安全组规则阻止您的连接。
  4. SSH密钥问题:如果远程主机配置了公钥认证,并且您没有提供正确的公钥,那么连接可能会被拒绝。
  5. 服务器资源问题:远程服务器可能由于资源不足(如内存、CPU)或其他系统问题而无法处理连接。
  6. SSH版本不兼容:您的SSH客户端和远程主机的SSH服务器之间的版本可能存在不兼容问题。
  7. 网络问题:您的网络连接可能不稳定,或者存在网络中断。 一般主要考虑服务是否运行、防火墙、密钥和版本的问题

比如:

我这里的问题是:忘记启动服务了,即便改成自动也要先启动服务,下次电脑开机后会自动启动服务

参考资料:

DNS中SSH主机密钥指纹验证记录的大规模分析

安全保护(SSH):基于超文本传输协议(HTTP)的公钥身份验证

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值