Python之Web开发中级教程----搭建SSH环境
SSH 的全称是 “安全的 Shell(Secure Shell)”,它功能强大、效率高,这个主流的网络协议用于在两个远程终端之间建立连接。让我们不要忘记它名称的“安全”部分,SSH 会加密所有的通信流量,以防止如劫持、窃听等攻击,同时提供不同的身份认证方式和无数个配置选项。
SSH 协议基于客户端-服务器(server-client)(CS)架构。“服务器(Server)”允许“客户端(Client)”通过通信通道进行连接。该信道是经过加密的,信息交换通过 SSH 公私钥进行管理。
在 Ubuntu 系统中,开启 SSH 服务可以让远程用户通过 SSH 安全地访问服务器。下面是开启 SSH 的步骤:
- 1、安装openssh-server
注意,在安装新的包或者软件前,要更新你的 Ubuntu 系统,以确保运行的是最新版本的程序。
Sudo apt-get update
sudo apt-get install openssh-server
如果SSH服务没有启动,则执行
Sudo service ssh start
禁用SSH服务的命令:sudo systemctl disable
启用SSH服务的命令:sudo systemctl enable
- 2、检查服务器状态
service ssh status
你还可以使用 systemctl 命令:
sudo systemctl status ssh
如果你的结果中 SSH 服务没有运行,使用这个命令运行它:
sudo systemctl enable --now ssh
3、允许SSH通过防火墙
Ubuntu 带有名为 UFW(简单的防火墙(Uncomplicated Firewall))的防火墙,这是管理网络规则的 iptables 的一个接口。如果启动了防火墙,它可能会阻止你连接服务器。
想要配置 UFW 允许你的接入,你需要运行如下命令:
sudo ufw allow ssh
UFW 的运行状态可以通过运行 sudo ufw status 来检查。
现在,我们的 SSH 服务器已经开始运行了,在等待来自客户端的连接。
注:用命令开启防火墙:sudo ufw enable
用命令关闭防火墙:sudo ufw disable
用命令重启防火墙:sudo ufw reload
用查看防火墙版本:sudo ufw version
默认允许外部访问本机:sudo ufw default allow
默认拒绝外部访问本机:sudo ufw default deny
允许外部访问53端口:sudo ufw allow 53
查看53端口的监听状态:sudo netstat -tunlp | grep 53
- 4、Ifconfig 查看IP
telnet 127.0.0.1 22(127.0.0.1是本地地址,22是SSH专属的端口号)
二、SSH远程连接
环境准备:Windows10系统作为本地机器,Ubuntu系统作为远程机器,目的从Windows SSH远程链接Ubuntu系统。
两种方法链接:
第一种、密码认证方式SSH远程连接
缺点:每次连接都需要输入密码。
在Windows中打开cmd.exe
执行结果:
第二种、基于公钥SSH远程连接
原理:在本地机器上生成一对公钥和私钥,然后手动把公钥上传到远程服务器。这样每次登录时,远程主机会向用户发送一段随机字符串,而用户会用自己的私钥对这段随机字符串进行加密,然后把加密后的字符串发送给远程主机,远程主机会用用户的公钥对这段字符串进行解密,如果解密后的字符串和远程主机发送的随机字符串一致,那么就认为用户是合法的,允许登录。
SSH 支持多种用于身份验证密钥的公钥算法, 包括 RSA、DSA、ECDSA 和 ED25519 等,其中 RSA 算法是最常用的,因为它是 SSH 协议的默认算法,所以我们这里以 RSA 算法为例来生成密钥,并配置免密码远程连接。
ssh-keygen 是为 SSH 创建新的身份验证密钥对的工具。此类密钥对用于自动登录、单点登录和验证主机,常用参数定义如下:-t 参数指定密钥类型;-b 参数指定密钥长度
步骤:
1、生成秘钥对
在Windows中打开cmd.exe,执行ssh-keygen -t rsa -C gocntest
- 2、复制公钥
在Windows中找到保存私钥的路径,将同目录下的公钥拷贝到ubuntu系统中
- 3、将公钥文件拷贝到ubuntu系统中
我采用将id_rsa.pub文件放在ISO中,加载在虚拟机的CD-ROM中。在Ubuntu系统中读出来的CD-ROM如下图:
- 4、将公钥中的内容 复制粘贴到.ssh/authorized_keys文件中
在Ubuntu的终端中,执行:cat [拷贝过来的公钥文件]
进入/home/go/.ssh/目录下
执行gedit authorized_keys
- 4、在windows系统中,远程连接Ubuntu
Ubuntu系统中执行ifconfig查看IP地址
Windows系统中执行远程连接命令:
ssh-keygen命令参数详解
-b BITS | 指定密钥长度 |
-e | 读取私有或公共 OpenSSH 密钥文件并以 -m 选项指定的格式之一将密钥打印到标准输出。 |
-C | 添加注释 |
-f FILENAME | 指定用来保存密钥的文件名 |
-i | 以 -m 选项指定的格式读取未加密的私钥(或公钥)文件,并将 OpenSSH 兼容的私钥(或公钥)打印到 stdout。 |
-l | 显示公钥文件的指纹数据 |
-m KEY_FORMAT | 为 -i(导入)或 -e(导出)转换选项指定密钥格式。支持的密钥格式为:“RFC4716”(RFC 4716/SSH2 公钥或私钥)、“PKCS8”(PEM PKCS8 公钥)或“PEM”(PEM 公钥)。 默认转换格式为“RFC4716”。 |
-N | 提供一个新密语 |
-P PASSPHRASE | 提供(旧)密语 |
-q | 静默模式 |
-t | 指定要创建的密钥类型。可能的值为“dsa”、“ecdsa”、“ecdsa-sk”、“ed25519”、“ed25519-sk”或“rsa”。 |
-y | 从 OpenSSH 格式的私钥导出公钥 |