网站首页 > 编程文章 正文
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查看配置文件的帮助
猜你喜欢
- 2024-10-20 LOLBins免杀技术研究及样本分析(花指令免杀教程)
- 2024-10-20 kettle-循环抽取,插入kafka(kettle循环遍历)
- 2024-10-20 MobaXterm全能型终端神器,神级SSH工具!
- 2024-10-20 如何搭建一个wordpress博客(wordpress个人博客模板)
- 2024-10-20 Oracle OGG 安装介绍(oracle g11安装)
- 2024-10-20 ORACLE 11G RAC 安装-通过VM配置共享磁盘
- 2024-10-20 使用Xshell实现远程登录Linux(xshell远程连接linux,必须在虚拟机登录linux吗)
- 2024-10-20 自动化部署——PXE无人值守安装(无人值守系统安装)
- 2024-10-20 使用KVM制作OpenStack QCOW2格式镜像
- 2024-10-20 CentOS 7.6下安装Oracle 11.2.0.4
你 发表评论:
欢迎- 最近发表
-
- 数据不丢失 从Windows 11的DEV版降级到正式版
- Win11学院:在Windows11 25905预览版中如何启用Dev Drive
- DEVC++的卸载(devcon卸载驱动)
- win11 dev 开发版 升级攻略完整版
- 最新Windows11+Windows10系统各种版本永久激活密钥以及下载链接
- 想学Python,却还记不住语法?神仙书籍 python背记手册双手奉上
- 如何用Python语言开发大型服务器程序
- 30天Python 入门到精通(python零基础入门到精通)
- 入门扫盲:9本自学Python PDF书籍,让你避免踩坑,轻松变大神!
- 学好Python需要看的4本书推荐(学python好用的书)
- 标签列表
-
- spire.doc (59)
- system.data.oracleclient (61)
- 按键小精灵源码提取 (66)
- pyqt5designer教程 (65)
- 联想刷bios工具 (66)
- c#源码 (64)
- graphics.h头文件 (62)
- mysqldump下载 (66)
- sqljdbc4.jar下载 (56)
- libmp3lame (60)
- maven3.3.9 (63)
- 二调符号库 (57)
- 苹果ios字体下载 (56)
- git.exe下载 (68)
- diskgenius_winpe (72)
- pythoncrc16 (57)
- solidworks宏文件下载 (59)
- qt帮助文档中文版 (73)
- satacontroller (66)
- hgcad (64)
- bootimg.exe (69)
- android-gif-drawable (62)
- axure9元件库免费下载 (57)
- libmysqlclient.so.18 (58)
- springbootdemo (64)
本文暂时没有评论,来添加一个吧(●'◡'●)