Linux之SSH服务详解,第1张

Linux之SSH服务详解

操作系统即使是最小安装ssh默认是已经安装的。默认ssh服务也是开启的,可以通过命令service sshd status来查看sshd服务是否开启,开机时自动启动的,可以通过命令chkconfig –list来查看开机是否自动启动,和SElinux没有直接的冲突,防火墙默认唯一开启的服务。Ssh服务是为了取代明文传输的而开发的,是用密文传输来保证安全。Ssh v1被破解过,但事实证明ssh v2是安全的。

我们通过命令ssh root@172111来远程登陆到远程一台服务器,第一次连接会询问是否信任要连接的服务器,输入yes就把服务器的公钥添加到自己已知的信任主机里面,下次登陆就可以直接输入密码远程安全的管理服务器了。

Known_hosts存储在用户用户家目录下的一个隐藏目录ssh下面,通过命令进入到ssh隐藏目录下,通过cat known_hosts命令可以看到远程受信任的公钥信息。当对方的公钥信息发生变化的时候,我们需要通过命令rm –f known_hosts删除这个文件,重新下载最新的公钥才能保证安全。

我们进入/etc/ssh目录,用ll查看目录信息,找到sshd_config这个目录,这是sshd的配置文件,通过命令vim sshd_config我们可以进入文件对有需要的地方进行修改,我们可以修改ssh的版本号、端口等信息,修改配置后需要通过命令service sshd restart对服务进行重启。

Ssh内嵌了一个sftp服务器,通过命令sftp root@172111,通过安全的ftp连接到远端的服务器,与ssh到远端非常相似,也需要下载对方服务器的公钥,并输入超级用户的密码,登陆成功后用ls列出ftp资源目录。

我们通过ssh-keygen产生公钥和私钥,进入ssh的隐藏目录下,通过ll命令列出目录,可以看到已经生成的私钥为id_rsa,公钥为id_rsapub。通过ssh-copy-id把自己的公钥拷贝到远程服务器主机上,下次就可以直接访问远程服务器而不需要输入密码。

本文是笔者查阅网上资料做的总结,关于SSH原理,什么是对称加密和非对称加密,本文不过多介绍。这里介绍一下SHH的工作过程、配制方法,可能出现的问题及解决方法。

说明:本文中涉及的例子,SSH客户端为:本地主机A,SSH服务器为:服务器B

SSH协议采用C-S(客户端-服务器端)架构进行双方的身份验证以及数据的加密。

服务器端组件监听指定的端口,负责安全连接的建立、对连接方的身份认证、以及为通过身份认证的用户建立正确的环境。

客户端负责发起最初的TCP握手、安全连接的建立、验证服务器的身份与之前记录中的一致、并将自己的验证信息提供给服务器。

一个SSH会话的建立过程分为两个阶段。第一阶段,双方沟通并同意建立一个加密连接通道以供后续信息传输用。第二阶段,对请求接入的用户进行身份验证以确定服务器端是否要给该用户开放访问权限。

当客户端发起TCP连接时,服务器端返回信息说明自己支持的协议版本,如果客户端上支持的协议与之匹配,则连接继续。服务器会提供自己的公共主机密钥(public host key)以让客户端确认自己访问的是正确的机器。

然后,双方采用一种Diffie-Hellman算法共同为该会话建立密钥。每一方的一部分私有数据,加上来自对方的一部分公共数据,通过这种算法计算,能够得出完全相同的密钥用于本次会话。

整个会话的通讯内容都使用该密钥进行加密。这个阶段使用的公钥/私钥对与用户验证身份用的SSH密钥是完全无关的。

经典Diffie-Hellman算法的计算步骤如下:

这个共享密钥的加密方式被称为二进制数据包协议(binary packet protocol)。该过程能够让双方平等的参与密钥生成的过程,而不是由单方掌握。这种共享密钥生成的过程是安全的,双方没有交换过任何未经加密的信息。

生成的密钥是对称式密钥,一方用于加密信息的密钥等同于另一方用于解密信息的密钥,而任何第三方由于不持有该密钥,是无法解密双方传递的内容的。

会话加密通道建立后,SSH开始进入用户认证阶段。

下一步,服务器验证用户身份以决定是否准许其访问。验证有不同的方式,选择的验证方式取决于服务器的支持。

最简单的验证是密码验证:服务器要求客户端输入密码,客户端输入的密码经过上述的通道加密传输给服务器。

虽然密码是加密过的,然而该方法仍然不被推荐,因为用户经常为了省事而使用过于简单的密码,而这类密码很容易就能够被自动化脚本破解。

最流行的验证方式是SSH密钥对,这也是当前最推荐的方式。SSH密钥对是非对称密钥,私钥和公钥分别用于不同的功能。

公钥用于加密,而私钥用于解密。公钥可以随意上传、共享,因为公钥的流通并不会危及到私钥的保密性。

SSH密钥对的验证过程起始于上一部分加密通道建立之后,其具体执行步骤如下:

简单来说,服务器端用公钥加密信息,客户端用私钥解密信息以证明自己持有私钥。该过程同时使用了对称加密和非对称加密,两种方式各有自己的功用。

命令如下:

用户名:为要登录的服务器B中已存在的用户账户名

IP地址:为服务器B的IP地址

-p 端口号:用来指定端口号,默认为22

第一次登录时,会提示如下提示:

大概意思是说,你正在访问的主机不能验证它的真实性,它的RSA key(当前访问主机的公钥)指纹是怎样的,你确定要继续连接吗?

输入yes继续,会提示,已永久把当前访问主机的RSA key添加到了已知主机文件(用户目录下,ssh 文件夹中的knwon_hosts文件)中。之后再次 SSH 登录就不再有该提示了。

接着,输入登录账户的密码即可。

SSH 密码登录,需要服务器开启密码验证权限,编辑服务器SSH配置命令如下:

在 sshd_config 文件中,Protocol 2 下面 #PasswordAuthentication yes,将前面的#号去掉,保存退出。

公钥登录,即免密码登录。避免的每次登录都要输入的麻烦,也防止了中间人攻击。是SSH远程登录最常用的登录方式。

提示输入密钥对名称,直接回车,使用默认名称即可;

提示输入密码(使用私钥时,要输入密码),直接回车,不使用密码即可。

首先,登录服务器B,在进行下面的操作。

找到 #PubkeyAuthentication yes,删除 #号,保存退出。

重启 ssh 服务

也可指定验证私钥:

本地主机A,生成密钥对后:

sudo vim /etc/selinux/config

本文最初发表于 我的个人站点

更详细的解释可以参考 SSH

简单来理解,就是我拥有一台服务器,我现在想要登录上去做一些事情,那就得使用ssh登录到远程的服务器上,才能在上面进行操作。

一开始在远程服务器上面,需要查看一下他的sshd服务启动了没有,如果没有启动,任何客户端主机是连接不上来的,一般如果是自己在云厂商处购买了主机,主机启动的时候就会把sshd服务启动起来。但有可能自己在测试环境搭建机器的时候,是没有默认启动的,这时候就需要在测试机器的终端看一下,命令如下

如果没有启动的话,那就启动一下,命令如下

这里我在测试环境机器的ip是 1921680187, 我在自己的电脑上想要登录这台机器,我要做的就是使用ssh命令去登录1921680187这台主机

我需要告诉1921680187这台主机我以谁的身份去登录, 1921680187会询问密码,命令如下

敲入正确的密码之后,我们就已经成功登录了主机了

这里看到让我输入一个文件名字来保存密匙,我这里示例就输入一个"foxchao"

回车以后,询问是否要输入一个密码来保护这个密匙,为了方便起见,我就不输入了,不然每次使用这个密匙文件还要输一遍密码,直接一路回车就ok,如下所示

到了这里,可以看到我们已经创建好了密匙对

现在我们新建了自己的密匙对之后,把foxchaopub这个文件放到目标的机器上,加入目标机器的 authorized_keys 中就可以了,以后登录的时候就可以免去输入密码的步骤。

那我们先用scp放上去 ,关于scp命令,这里不过多介绍,就是传文件的一个命令,使用也比较简单,具体想了解可以看这里 Linux scp命令

这里表示我要把foxchaopub这个文件拷贝到1921680187这台机器root用户的用户目录下

回车之后会询问密码,输入密码确认之后,文件就传上去了,如下

这时候我们先用密码登上去看看传上去没有

可以看到foxchaopub这个文件已经传上来了

目标主机上如果没有ssh文件夹,就自己创建一个,创建好之后,再创建一个authorized_keys文件。如果有的话就不用了。

把刚才的foxchaopub这个文件内容写进authorized_keys

看一下,已经有内容了

这里需要注意

authorized_keys 文件对权限有哟求,必须是600(-rw——-)或者644

ssh目录 必须是700(drwx——),否则一会儿登录不成功

弄完之后检查一下权限,如果不是的话,改成响应的权限就ok了

在登录之前,要确认一下目标主机是否允许密匙对登录,一般都是打开的,如果没有打开就自己打开

(查看 /etc/ssh/sshd_config 文件内容 中的 PubkeyAuthentication 这一项是否为 yes,如果不是就自己修改成yes之后重启sshd服务 )

为了避免繁琐的每次都敲一长串 user@host 这样的命令, 可以自己在ssh 目录下建一个config文件,文件内容如下,想要多了解一下配置参数使用的,可以看 linux ssh_config和sshd_config配置文件

文件建立好之后,直接使用自己定义的别名登录,非常方便快捷

如果是自己局域网搭建的机器,倒不用在意服务器的安全问题,但如果是暴露在公网上的机器,可以通过公网ip登录的,一定要注意自己服务器的安全问题,最起码不能开放默认端口,以及密码登录

在服务器上查看一下登录的日志,可以看到很多想要尝试登陆机器的人,所以公网上面的机器一定要做好自我保护

这里只列出一小部分的日志

统计一下,可以看到有29190次登录失败的记录

我们改掉默认的端口,以及禁用密码登录,只支持密匙对登录,这样一来,提高了服务器本身的安全性,至少没那么容易被别人登录上来为所欲为。

在服务器上修改sshd的配置文件

保存之后,重启sshd服务

使用自己定义的端口登录

SSH全称是SecureShell,SSH是创建在应用层和传输层基础上的安全协议,采用端口为22,下面我来讲解一下如何使用putty工具来连接服务器:

连接服务器

下载putty软件,网络搜索这个软件有很多下载的,当然也不一定是这款,也可以用其他同类软件连接:

打开软件之后,输入你连接服务器的ip地址,勾选ssh,端口22:

点击确定后,输入帐号 和 密码(密码不可见,只需要输入即可);完成后回车,看看有没有成功连接上;如果可以连接上,就可以执行命令了;如果连接不上,请检查是否密码错误或者服务器配置问题:

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » Linux之SSH服务详解

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情