网站首页 > 博客文章 正文
Linux 7 Basic NO.8
大家好!本节将讲解在Linux 7中如何使用OpenSSH配置远程系统上的安全命令行访问。
如有不足,请指出并指正。 ^-^
什么是OpenSSH Secure Shell (SSH) ?
OpenSSH这一术语指系统中使用的Secure Shell软件的软件实施。
OpenSSH Secure Shell (ssh)用于在远程系统上安全运行shell。如果您在可提供SSH服务的远程Linux系统中拥有用户账户,则ssh是通常用来远程登录到该系统的命令。ssh命令也可用于在远程系统中运行各种命令。
SSH的全称Secure Shell,是Client/Server模式,默认端口号为22,相比Telnet,更加安全,因为Telnet是明文传输的
SSH其实用于商业,而OpenSSH即为开源的,在Linux中大都存在
SSH客户端语法:
ssh [username@hostname] [-p 端口号] 端口号默认为22,实际使用中为了安全,可以将其更改为其它端口号,如2222
eg:
ssh -X root@desktop0.example.com
当客户端连接服务器时,服务器需要验证客户端的身份,有两种验证方式。
1、基于用户名和密码身份验证
实验环境,两台机器如下,
classroom.example.com 充当ssh server
desktop0.example.com 充当ssh client
当我们执行如下命令时,可以看到客户端需要与服务器建立连接,此时需要输入yes,客户端将会接受到服务器发送过来的一个密钥,该密钥可用于之后验证客户端与服务器之间的连接,如果输入no,将断开连接
注意:使用“基于用户名和密码身份验证”这种方式验证连接,第一次连接时,因为无法确定所连接的classroom这台服务器就是我们需要的,可能是同名的第三方的机器,所以,第一次需要输入yes,服务器发送密钥给客户端,以便在之后的连接中,可以使用该密钥进行验证。
输入yes后,回车。再次连接时,发现此时不需要再进行密钥的发送和接受,只需要验证密钥,输入密码即可
[root@desktop0 ~]# ssh -X root@classroom.example.com
客户端接收了来自服务端的公钥并保存在本地,在服务端则还有相对应的私钥,这密钥是成对出现的,如果服务端的私钥被修改了,那么,客户端在连接时,将会失败。
基于用户名和密码身份验证原理:
客户端向服务器发送一个连接的请求
第一次连接服务器,服务器向客户端发送一个公钥,客户端选择接收,该密钥被保存在用户的家目录下的隐藏文件~/.ssh/known_hosts
客户端使用服务器传送过来的公钥对用户密码进行加密,并发送给服务器
服务器接收到客户端发送过来的密码,服务器使用自己的私钥解密,验证密码合法性,于/etc/shadow进行验证
接下来,我们进行一个测试,将服务端的私钥删除,客户端连接会出现什么情况?
如下图,可以看到,客户端已经无法连接到服务端,直接报错,我们把客户端的公钥也情况,还是一样无法连接,此时,只需要将服务端ssh的服务重新启动一下,这时服务端将会自动生成一对密钥(公钥和私钥)
这里可以看到服务端的公钥和私钥,并且还存在两对密钥,主要是其加密方式不一样
此时,因为客户端无法去验证公钥,所以,无法进行连接,即使删除客户端的公钥,也是一样,因为服务端已经不存在密钥,只能重新启动服务端的ssh服务,使其重新生成一对密钥
此时,再进行连接时,相当于第一次连接,需要进行公钥的传送接受。
2、基于密钥的身份验证
在上面的实验中,我们发现这种“基于用户名和密码身份验证”的验证方式不是很方便,因为为交互式的,需要我们进行确认输入密码,接下来,将进行“基于密钥的身份验证”这种验证方式的实验,大家可以体验以下有什么区别
实验环境跟上面的一样
desktop0.example.com(客户端)连接classroom.example.com(服务端)时,不需要输入密码即可登录到服务端
[root@desktop0 ~]# ssh-keygen 在客户生成一对密钥(公钥/私钥)
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 是否将私钥存储在(默认就直接回车)
Enter passphrase (empty for no passphrase):是否加密私钥 (默认直接回车为不加密)
Enter same passphrase again: 对应上面也直接回车即可
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.这里同时产生了一个公钥
The key fingerprint is:
0e:4a:29:75:0b:40:73:53:08:94:85:bd:9b:42:05:5e root@desktop0.example.com
[root@desktop0 ~]# ssh-copy-id root@classroom.example.com
这条命令,可以将我们刚刚生成的公钥拷贝给服务端,即你想要连接哪台服务器,就将公钥拷贝过去即可
[root@desktop0 ~]# ssh -X root@classroom.example.com
执行完上面的操作后,我们发现再次连接到服务端时,已经不需要密码了,因为服务端有从客户端拷贝过去公钥
基于密钥身份验证原理:
客户端首先在本地生成一对密钥,然后客户端通过ssh-copy-id把公钥传送给目标服务器
客户端使用服务器的公钥加密一段数据再使用自己的私钥加密传送给目标服务器(双向验证)
客户端验证服务器的合法性
服务器也要验证客户端的合法性
验证通过客户端和服务器建立连接
当我们在使用自动化的任务时,比如拷贝文件/etc/passwd到服务端classroom的目录/mnt下,根本可以不用输密码,使用脚本直接运行即可
此时,对于客户端来说,私钥就很重要了,如果私钥被他人拷贝到其它电脑,那么也可以不需要任何密码即可连接到相应的服务端,客户端私钥位置如下
接下来,进行私钥加密的实验(主要用在外网进行连接时)
[root@desktop0 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
/root/.ssh/id_rsa already exists.
Overwrite (y/n)? y 此时提示私钥已经存在,y确认覆盖
Enter passphrase (empty for no passphrase): 输入密码进行私钥加密,
Enter same passphrase again: 输入密码进行私钥加密
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
85:bf:5a:a2:45:f9:60:64:0e:0f:ce:34:9d:11:9c:b3 root@desktop0.example.com
此时,因为客户端重新生成了一对密钥,所以,需要重新拷贝公钥到服务端
再次进行连接时,需要输入前面客户端给私钥加密的密码,才可进行连接。
现在问题出现了,私钥是安全了,但是又变成了这种交互式的连接,怎么实现自动化呢?
此时,我们需要在客户端启用ssh-agent,命令如下
[root@desktop0 ~]# ssh-agent bash
[root@desktop0 ~]# ssh-add
现在再进行连接时,就可以不用输入密码了。
通过以上操作,对私钥进行加密,这样他人拿到你的私钥也需要密码才能进行连接
SSH服务端的配置
ssh服务端软件,防火墙默认打开22端口
openssh-server-6.4p1-8.el7.x86_64 服务端软件
openssh-clients-6.4p1-8.el7.x86_64 客户端软件
关于ssh软件,Linux即使是最小化安装,也是默认安装和默认开启的
如下,ssh默认监听的端口为22,监听的地址为任意IP
对于客户端为Linux系统的,直接ssh直接连接即可,如果为Windows系统的,可以安装相应的ssh客户端,如putty,Secure CRT,Xmanager等
ssh服务端软件的配置文件路径如下
/etc/ssh/sshd_config 服务端配置文件
/etc/ssh/ssh_config 客户端配置文件
[root@classroom ~]# vim /etc/ssh/sshd_config
可以使用以上命令进行修改,如修改ssh监听的端口或者地址等
可以通过 man sshd_config查看配置文件的帮助
- 上一篇: SSH安全配置:修改ssh连接端口#ssh
- 下一篇: 实践总结——Git 常见错误及解决方法
猜你喜欢
- 2024-10-10 Nutch-Hadoop-MongoDB搭建分布式爬虫
- 2024-10-10 OpenSSH更新至8.0,修复存在35年的安全漏洞
- 2024-10-10 [python] 基于paramiko库操作远程服务器
- 2024-10-10 利用Zabbix监控系统SSH方式检测远程目标主机
- 2024-10-10 手工方式IPSec VPN配置保障单位与分支之间的数据安全
- 2024-10-10 SSH 简介:安全远程访问的利器(安全远程登录协议ssh)
- 2024-10-10 [ Laravel 5.6 文档 ] 快速入门 —— 重量级开发环境:Homestead
- 2024-10-10 快速上手:Docker环境下的WordPress安装全攻略
- 2024-10-10 阿里云服务器Centos7.3安装Git(阿里云服务器centos装桌面)
- 2024-10-10 如何使用ssh密钥登录远程服务器(如何使用ssh密钥登录远程服务器账号)
你 发表评论:
欢迎- 367℃用AI Agent治理微服务的复杂性问题|QCon
- 358℃初次使用IntelliJ IDEA新建Maven项目
- 355℃手把手教程「JavaWeb」优雅的SpringMvc+Mybatis整合之路
- 351℃Maven技术方案最全手册(mavena)
- 348℃安利Touch Bar 专属应用,让闲置的Touch Bar活跃起来!
- 346℃InfoQ 2024 年趋势报告:架构篇(infoq+2024+年趋势报告:架构篇分析)
- 344℃IntelliJ IDEA 2018版本和2022版本创建 Maven 项目对比
- 342℃从头搭建 IntelliJ IDEA 环境(intellij idea建包)
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)