您当前的位置:首页 > 电脑百科 > 软件技术 > 操作系统 > linux

一文学会 SSH 服务

时间:2020-02-16 10:38:22  来源:  作者:
一文学会 SSH 服务

作者 | 阿文

责编 | 郭芮

我是一名云计算工程师,在实际工作中经常遇到很多人把使用windows那套习惯带来linux上来,其中最严重的一点就是使用密码的方式来进行登录鉴权。我不止一次的提醒他们不要在Linux上使用密码而应该使用密钥的方式鉴权,因为密钥比密码从安全性上来说根本不是一个量级的。

本文我就详细带大家来全方位的了解下SSH以及在Linux 系统中的使用和一些简单的使用技巧。
 

1.什么是SSH?

简单的说,SSH是一种网络协议,用于计算机之间的加密登录。

在早期其实也有一些例如 telnet这样的工具,如果你是一名网络管理员,在操作交换机和路由器时候一定会和telnet 打过交道,但是telnet 协议是明文传输的,因此它并不安全。正是由于这个原因后来有了SSH,SSH全称:Secure Shell,安全的命令解释器,为客户机提供安全的Shell环境,用于远程管理,默认端口:TCP 22,它被广泛的应用在unix 和Linux 操作系统中。

在Linux中的SSH 主要是 OpenSSH。

  • 主要软件包:openssh-server、openssh-clients

  • 服务名:sshd

  • 服务端主程序:/usr/sbin/sshd

  • 客户端主程序:/usr/bin/ssh

  • 服务端配置文件:/etc/ssh/sshd_config

  • 客户端配置文件:/etc/ssh/ssh_config

要通过SSH 来登录计算机非常的简单,只需要执行如下命令即可:


 

ssh user@ip

例如要通过root 用户登录52.33.1.2这台机器则执行:


 

ssh root@52.33.1.2

即可,它会默认使用22端口来进行登录。

SSH服务器端配置文件sshd_config,默认在/etc/ssh/目录下面的sshd_config 文件。
 

2.SSH登录的用户验证方式

  • 密码验证:使用服务器中系统帐号对应的密码;

  • 密钥对验证:使用客户机中生成的公钥、私钥。

密码验证

密码验证需要在系统中设置一个密码,设置密码如下:


 

[root@centos ~]# passwd root

Changing password for user root.

New password:

Retype new password:

passwd: all authentication tokens updated successfully.

只要你的SSH 没有禁止密码登录,并且用户属性没有设置成nologin,都可以通过密码来进行连接即可。但是密码登录非常的不安全,互联网上几乎无时无刻不遭受恶意入侵,入侵者通过暴力破解的方式来对目标系统进行密码破解。最简单的破解只需要三中个工具即可完成。

  • masscan 扫描目标主机哪些端口是开放的;

  • hydra 可以指定ip和词典来对目标主机进行密码暴力破解;

  • 词典。

以下面的命令解释,入侵者要破解58.12.95.153这台机器的ssh密码。只需要知道它的端口和用户名就可以,程序会代替人自动去进行密码校验直到试出正确密码。


 

root@ubuntu:~# hydra -s 22 -v -l root -P pass.txt 58.12.95.153 ssh

只要入侵者的密码库足够丰富,破解的机器性能足够强大,破解不是问题。而一般人所使用的密码并不会特别复杂,因此密码的方是破解非常简单。

密钥认证

SSH 支持通过密钥的方是来进行验证,包括rsa算法或dsa 算法等。例如rsa 算法,RSA加密算法是一种非对称加密算法,在公开密钥加密和电子商业中被广泛使用。

1977年,三位数学家Rivest、Shamir 和 Adleman 设计了一种算法,可以实现非对称加密。这种算法用他们三个人的名字命名,叫做RSA算法。从那时直到现在,RSA算法一直是最广为使用的"非对称加密算法"。毫不夸张地说,只要有计算机网络的地方,就有RSA算法。

这种算法非常可靠,密钥越长,它就越难破解。根据已经披露的文献,目前被破解的最长RSA密钥是768个二进制位。也就是说,长度超过768位的密钥,还无法破解(至少没人公开宣布)。因此可以认为,1024位的RSA密钥基本安全,2048位的密钥极其安全。

要使用密钥认证,首先需要创建一对密钥对,执行ssh-keygen -t rsa按几次回车键即可生成密钥文件。


 

[root@centos ~]# ssh-keygen -t rsa

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:

SHA256:eHM9jL0Ry+hxt7H3ShEsKlkAxPvnKgN8KejMQ8iot3s root@centos

The key's randomart image is:

+---[RSA 2048]----+

| oo.. |

| . . . |

| . . o o |

| .. o O + . |

|o. o .oS * X + |

|o.o + o..=.o = = |

|.= + o. . + .|

|. * E o . . ..|

| .o= o.. ...|

+----[SHA256]-----+

默认情况下所生成的密钥文件在 ~/.ssh/ 目录下:


 

[root@centos ~]# cd ~/.ssh/

[root@centos .ssh]# pwd

/root/.ssh

[root@centos .ssh]# ls

authorized_keys id_rsa id_rsa.pub

其中:

  • id_rsa 是私钥文件;

  • id_rsa.pub 是公钥文件;

  • authorized_keys 可以追加其他设备的公钥内容到该文件中实现密钥方式登录。比如我一台机器A 希望登录机器B,我把A机器中的id_rsa.pub 内容复制粘贴到B机器的authorized_keys 末行即可。

在使用时需要主要~/.ssh 的目录必须为700,目录中的三个文件的权限必须为600,否则无法正常使用密钥认证。

修改服务端配置文件中的如下内容:


 

PasswordAuthentication no

重启ssh 服务即可实习禁止密码登录。

客户端使用密钥登录可以使用如下命令:


 

ssh -i 密钥文件 用户名@ IP 地址

 

3.SSH 的客户端

在 ~/.ssh/config中可以配置客户端的一些连接参数,可以执行:


 

man ssh_config

它的配置如下所示


 

Host *

PasswordAuthentication no

ChallengeResponseAuthentication no

HashKnownHosts yes

ProxyCommand ssh jump@123.111.104.111 -p 65422 -W %h:%p

Host aliyun

HostName 114.113.199.88

User hedu

IdentityFile ~/.ssh/cloudsupport

Port 1046

其中,config配置含义如下:

  • Host:用来指定该key的Host名字,通配符*表示任意Host 的配置。

  • Hostname:此处指定Host对应的具体域名或 IP 地址。

  • Port:说明目标Host 的连接端口。

  • User root:说明该配置的用户得是root。

  • IdentityFile ~/.ssh/id_rsa:这行最为关键,指定了该使用哪个ssh key文件,这里的key文件一定指的是私钥文件。

配置完成之后,比如我们要登录aliyun这个Host,执行如下命令即可。


 

ssh aliyun

 

4.SSH 反向隧道

我们可以通过 SSH 实现内网穿透,通过 SSH 的方式在一个内网访问另外一个内网,我们把他称为 SSH 反向代理。

一文学会 SSH 服务

步骤如下:

  • 内网主机 10.1.100.12 ,SSH 端口为22;

  • 外网主机 121.42.110.23 ,SSH 端口为22开放一个要绑定内网主机的外网端口,例如2222;

我们要通过外网主机B 的2222端口连接到内网主机10.1.100.12。

首先,在外网主机修改/etc/ssh/sshd_config文件,如果没有添加即可:


 

GatewayPorts yes

然后重启SSH 服务。

在192.168.10.11执行:


 

ssh -NfR 2222:localhost:22 userb@121.42.110.23

参数说明:

一文学会 SSH 服务

通过ssh的2222端口连接外网主机,就可以代理到内网主机。

5.SSH 故障排查

1.遇到 SSH 连接异常

可以查看提示,如果提示不明显,可以使用 -vvv 参数打印详细的debug 信息:


 

ssh -vvv

一般可以在debug 信息中找到连接失败的问题。

2.遇到 ssh 连接卡很久

这种情况首先确认下 sshd_config 中的2个配置是否是如下这样:


 

UseDNS no

GSSAPIAuthentication no

UseDNS 选项打开状态下,当客户端试图登录SSH服务器时,服务器端先根据客户端的IP地址进行DNS PTR反向查询出客户端的主机名,然后根据查询出的客户端主机名进行DNS正向A记录查询,验证与其原始IP地址是否一致,这是防止客户端欺骗的一种措施,但一般我们的是动态IP不会有PTR记录,打开这个选项不过是在白白浪费时间而已,不如将其关闭。

另外一个是GSSAPI 认证会消耗很长时间,其实关闭了也没多大影响,一般 SSH 依次进行的认证方法的是 publickey, gssapi-keyex, gssapi-with-mic, password, 这个你可以ssh -v开启 debug 模式在连接日志看到。一般用户只使用 password 认证方式,但前面 3 个认证过程系统还是会尝试,这就浪费时间了,也就造成 SSH 登录慢。

关于 GSSAPI 相关的认证,消耗的时间比较多,具体可以查看 SSH 连接日志。

GSSAPI 主要是基于 Kerberos 的,因此要解决这个问题也就变成要系统配置有 Kerberos, 一般用户是没有配置 Kerberos的。



Tags:SSH 服务   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
本文我就详细带大家来全方位的了解下SSH以及在Linux 系统中的使用和一些简单的使用技巧。...【详细内容】
2020-02-16  Tags: SSH 服务  点击:(85)  评论:(0)  加入收藏
▌简易百科推荐
作用显示文件或目录所占用的磁盘空间使用命令格式du [option] 文件/目录命令功能显示文件或目录所占用的磁盘空间一些写法的区别du -sh xxx 显示总目录的大小,但是不会列出...【详细内容】
2021-12-23  mitsuhide1992    Tags:du命令   点击:(12)  评论:(0)  加入收藏
什么是linux内核linux就像是一个哲学的最佳实践。如果非要对它评价,我真的不知道该怎么赞叹,我只能自豪地说着:“linux的美丽简直让人沉醉。”我只能说是我处在linux学习的修炼...【详细内容】
2021-12-23  linux上的码农    Tags:linux内核   点击:(15)  评论:(0)  加入收藏
本文将比较 Linux 中 service 和 systemctl 命令,先分别简单介绍这两个命令的基础用法,然后进行比较。从 CentOS 7.x 开始,CentOS 开始使用 systemd 服务来代替 service服务(dae...【详细内容】
2021-12-23  软件架构    Tags:systemctl   点击:(14)  评论:(0)  加入收藏
mv是move的缩写,可以用来移动文件或者重命名文件名,经常用来备份文件或者目录。命令格式mv [选项] 源文件或者目录 目标文件或者目录命令功能mv命令中第二个参数类型的不同(...【详细内容】
2021-12-17  入门小站    Tags:mv命令   点击:(23)  评论:(0)  加入收藏
大数据技术AI Flink/Spark/Hadoop/数仓,数据分析、面试,源码解读等干货学习资料 98篇原创内容 -->公众号 Linux sed 命令是利用脚本来处理文本文件。sed 可依照脚本的指令来处...【详细内容】
2021-12-17  仙风道骨的宝石骑士    Tags:sed命令   点击:(22)  评论:(0)  加入收藏
Node是个啥?  写个东西还是尽量面面俱到吧,所以有关基本概念的东西我也从网上选择性地拿了下来,有些地方针对自己的理解有所改动,对这些概念性的东西有过了解的可选择跳过这段...【详细内容】
2021-12-15  linux上的码农    Tags:node   点击:(25)  评论:(0)  加入收藏
难道只有我一个人觉得Ubuntu的unity桌面非常好用吗?最近把台式机上面的Ubuntu 16.04格式化了,装了黑苹果用了一周,不得不说,MacOS确实很精美,软件生态比Linux丰富很多,比Windows简...【详细内容】
2021-12-14  地球末日村    Tags:ubuntu   点击:(40)  评论:(0)  加入收藏
简介Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。输出信息含义执行net...【详细内容】
2021-12-13  窥镜天    Tags:Linux netstat   点击:(28)  评论:(0)  加入收藏
对于较多数量的文件描述符的监听无论是select还是poll系统调用都显得捉襟见肘,poll每次都需要将所有的文件描述符复制到内核,内核本身不会对这些文件描述符加以保存,这样的设计...【详细内容】
2021-12-13  深度Linux    Tags:Linux   点击:(19)  评论:(0)  加入收藏
今天,我们来了解下 Linux 系统的革命性通用执行引擎-eBPF,之所以聊着玩意,因为它确实牛逼,作为一项底层技术,在现在的云原生生态领域中起着举足轻重的作用。截至目前,业界使用范...【详细内容】
2021-12-10  架构驿站    Tags:eBPF   点击:(29)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条