目录:
- 1、SSH登陆方式,基本配置
- 2、SSH详解-3.密钥登陆
- 3、渗透测试-SSH秘钥登录
- 4、华为5735ssh配置
- 5、SSH协议、openSSH远程口令及密钥登录配置
- 6、配置ssh远程登录
SSH登陆方式,基本配置
SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。本文主要介绍OpenSSH免费开源实现在Ubuntu中的应用,如果要在Windows中使用SSH,需要使用另一个软件PuTTY。
SSH之所以能够保证安全,原因在于它采用了非对称加密技术(RSA)加密了所有传输的数据。
传统的网络服务程序,如FTP、Pop和Telnet其本质上都是不安全的;因为它们在网络上用明文传送数据、用户帐号和用户口令,很容易受到中间人(man-in-the-middle)攻击方式的攻击。就是存在另一个人或者一台机器冒充真正的服务器接收用户传给服务器的数据,然后再冒充用户把数据传给真正的服务器。
但并不是说SSH就是绝对安全的,因为它本身提供两种级别的验证方法:
口令登录非常简单,只需要一条命令
还要说明的是,SSH服务的默认端口是22,也就是说,如果你不设置端口的话登录请求会自动送到远程主机的22端口。我们可以使用 -p 选项来修改端口号,比如:
首先使用ssh-keygen命令生成密钥对
然后根据提示一步步的按enter键即可,执行结束以后会在 /home/当前用户 目录下生成一个 .ssh 文件夹,其中包含私钥文件 id_rsa 和公钥文件 id_rsa.pub 。
(其中有一个提示是要求设置私钥口令passphrase,不设置则为空,如果为了免密登陆可以不设置。)
使用 ssh-copy-id 命令将公钥**到远程主机
ssh-copy-id会将公钥写到远程主机的 /root/ .ssh/authorized_key 文件中
使用ssh-copy-id命令登陆哪个用户就会存放在哪个用户的home目录下。
也可以手动**到authorized_key文件当中。
第一次登录时,会提示用户
意思是无法验证用户的公钥,是否正确,询问用户是否要继续。
ECDSA key给出了远程主机公钥的SHA256编码过的值,一般在远程主机的网站会告示公钥的值,
用户可以将这个公钥和网站上的公钥进行比对,正确则表明是远程主机。
输入yes之后,系统会将公钥加入到已知的主机列表,如下所示,已知列表中的主机,下次不会再询问。
SSH的配置文件通常在 /etc/ssh/sshd_config
配置文件中有非常详尽的注释,一般在工作中主要用到的几个配置
SSH详解-3.密钥登陆
SSH详解-1.ssh基础知识
SSH详解-2.ssh基本用法
SSH详解-3.密钥登陆
SSH详解-4.多个ssh公钥
在上一篇中我们了解到了ssh基本用法,ssh通过密码进行登录。密码登录存在很多问题。密码太简单,又不安全。密码太复杂,不容易记,而且每次登录都要输入很麻烦。于是就有了密钥登陆。
什么是密钥(key)?
ssh密钥登录采用的是 非对称加密 。
非对称密钥加密系统,又称公钥密钥加密。它需要使用不同的密钥来分别完成加密和解密操作,一个公开发布,即公开密钥(public key)和,另一个由用户自己秘密保存,即私用密钥(private key)。
如果数据使用公钥加密,那么只有使用对应的私钥才能解密,其他密钥都不行;反过来,如果使用私钥加密(这个过程一般称为“签名”),也只有使用对应的公钥解密。
了解完密钥后,接下来看看密钥登录的过程,SSH 密钥登录分为以下的步骤。
第零步,准备步骤客户端通过 ssh-keygen 生成自己的公钥和私钥,并将公钥放入远程服务器的指定位置。
第一步,用户客户端向服务器发起SSH登录的请求。
第二步,服务器收到用户SSH登录的请求,服务器生成一些随机数据发送给客户端。
第三步,客户端接收到服务器发过来的数据,客户端使用私钥对数据进行签名后再返回给服务器。
第四步,服务器收到客户端加密后的数据,使用对应公钥进行解密。然后判断解密后的数据是否与原始数据一致,如果一致就允许用户登录。
ssh-keygen 是OpenSSH提供的一个命令行工具,用于生成密钥登录所需的公钥和私钥。
在上面的例子中,我使用了-t参数来指定加密算法,一遍会选择rsa或者dsa。
第一个问题,问我要保存在哪?(直接Enter默认会保存在~/.ssh/id_rsa中)因为我之前已经生成过密钥了,我就保存在tenxun里面。
第二个问题,询问是否要为私钥文件设定密码保护(passphrase)。这样的话,即使入侵者拿到私钥,还是需要破解密码。如果为了方便,不想设定密码保护,可以直接按回车键,密码就会为空。
最后,就会生成私钥和公钥,屏幕上还会给出公钥的指纹,以及当前的用户名和主机名作为注释,用来识别密钥的来源。
从上面的公钥中我们可以看到末尾的公钥注释 23696@DESKTOP-GKRBCVI
公钥注释可以用来识别不同的公钥,表示这是哪台主机(DESKTOP-GKRBCVI)的哪个用户(username)的公钥。
注意 ,公钥只有一行。因为它太长了,显示的时候可能自动换行了。
OpenSSH 规定,用户公钥保存在服务器的 ~/.ssh/authorized_keys 文件。你要以哪个用户的身份登录到服务器,密钥就必须保存在该用户主目录的~/.ssh/authorized_keys文件。只要把公钥添加到这个文件之中,就相当于公钥上传到服务器了。每个公钥占据一行。如果该文件不存在,可以手动创建。
-i 指定要上传公钥(公钥文件可以不指定路径和 .pub 后缀名),user是所要登录的用户名,hostname是主机名,这两个参数与ssh 登录命令是一致。
特别注意 ,不是把公钥上传上去就行了,还需要把 authorized_keys 文件的权限要设为644,即只有文件所有者才能写。如果权限设置不对,SSH服务器可能会拒绝读取该文件,导致密钥登录失效,登录的时候还需要输入密码。
提到输入密码,如果再生成公钥和私钥的时候设置了密码,使用密钥登录的时候也需要输入私钥的密码,这样可以防止他人非法窃取了私钥。
私钥设置了密码以后,每次使用都必须输入私钥密码,这个问题可以使用 ssh-agent 命令解决。
百度百科-密钥
Git - 生成 SSH 公钥 (git-scm.com)
ssh(1) - OpenBSD manual pages
渗透测试-SSH秘钥登录
最近渗透遇到许多linux服务器,在多方信息收集无果后,想到了ssh的秘钥登录。但诸多知识点有点混乱,趁此时间再次复现一遍。
ssh中文名称叫安全外壳协议,是一种加密的网络传输协议。我们现在经常说的ssh指的是openssh,是对ssh协议的实现。
我们都知道ssh提供了两种安全级别的认证,一种口令认证,一种秘钥认证。
基于口令的认证时需要输入正确的用户名和密码,且连接加密。
ssh的连接过程为:
这里指的就是无法确定host的真实性,只知道它的公钥指纹。问你是否连接,
yes后就需要远程服务端的用户密码。密码输入正确后才可以登录。
当远程服务端的公钥被接受以后,就会保存在当前用户的/.ssh/known_hosts之中。下次再连接这台主机时,系统就会知道公钥已经保存在本地了,从而跳过警告部分,直接提示输入密码。
现在企业更流行使用秘钥登录。修改远程服务端的 /etc/ssh/sshd_config 配置文件,
重启sshd服务,就可以禁用密码验证。
ssh秘钥登录,其实就是"公钥登录",首先需要用户自己生成一对公钥和私钥。然后用户将自己的公钥放在远程服务端上。此时远程服务器持有公钥,用户持有私钥。满足"公钥加密,私钥解密"。
过程如下:
该命令用于生成秘钥对。
需要注意的是:
生成后可以在当前用户的.ssh文件夹下看到。
ssh-copy-id 命令将公钥写到远程服务端kali的test用户下的/.ssh/authorized_key文件中。
如果是第一次登录,用户也会在/.ssh/文件夹下创建known_hosts,记录了远程服务端的ip和对应的公钥指纹。
连接时默认去查找当前用户/.ssh/文件下是否存在私钥,如果没有需要指定私钥进行连接。
如果设置了证书的密码,则在远程服务器时需要输入密码。
在 /etc/hosts 可以配置主机名和IP地址
此时就可以直接ssh主机名。
当渗透测试拿到一台linux服务器,查找/.ssh/文件夹下是否存在私钥文件,或*.pub文件,因为私钥和公钥一块生成。结合known_hosts文件,可以去连接未知的机器。
反之,如果拿到的机器只存在known_hosts文件,则无法利用。该文件只能说明曾经接收过公钥。
如果拿到的机器只有authorized_key文件,则证明存在用户连接过该机器。
华为5735ssh配置
方法如下:
一、在本地设备服务端生成密钥对
[Huawei]rsa local-key-pair create
二、配置VTY
[Huawei]user-interface vty 0 4进入虚拟终端
[Huawei-ui-vty0-4]authentication-mode aaa认证模式AAA
[Huawei-ui-vty0-4]protocol inbound ssh 配置允许登录接入用户类型的协议(all | ssh | telnet)
三、创建用户以及密码
[Huawei]aaa 进入AAA
[Huawei-aaa]local-user admin password cipher admin privilege level 3设置用户名密码、用户等级
四、打开服务以及认证方式
[Huawei]stelnet server enable 打开SSH
[Huawei]ssh user admin authentication-type password 认证模式为密码模式
[Huawei]ssh user admin service-type stelnet 服务方式
五、实现
SSH协议、openSSH远程口令及密钥登录配置
SSH(Secure Shell)协议为远程登录或其它网络服务(如:sftp、scp)提供安全保障的一种协议。它设计之初的主要目的是替代telnet远程登录协议,由于telnet协议以明文的方式在互联网上传递数据和服务器账户口令,别有用心的人很容易就可以截获得到这些数据和口令。以下是SSH详细的登录过程:
a、版本号协商阶段
服务器端启动ssh服务,并打开22号端口(也可以配置为其它端口),等待客户端链接。客户端向服务器端发起TCP连接。连接建立后,服务器端和客户端开始商议欲使用的协议版本号。如果协商成功,进入密钥和算法协商阶段,否则,断开TCP连接。
b、密钥和算法协商阶段
服务器端和客户端分别向对方发送算法协商报文,其中包括了自己支持的非对称加密算法列表、加密算法列表、消息验证码算法列表、压缩算法列表等。服务器端和客户端根据双方支持的算法得出最终使用的算法(如非对称加密算法是采用RSA,还是DSA)。协商完成后,服务器端将自己的公钥发送给客户端,客户端根据公钥指纹决定是否信任此主机。选择信任此主机后,客户端使用服务器端的公钥将自己生成的会话密钥加密,发送给服务器端。以后的会话内容和口令都通过此会话密钥加密发送。通常,每过一个小时,服务器端和客户端会重新商定会话密钥,以防止会话密钥被暴力破解。
c、认证阶段
基于口令的认证:
客户端采用在算法协商阶段产生的会话密钥加密帐号、认证方法、口令,并将其传送给服务器端。服务器端收到后将其解密后,基于本地账户密码对其判断是否正确。如果正确,成功建立登录连接,否则,向客户端返回认证失败报文,其中包含了可再次认证的方法列表。当登录请求次数达到可允许的尝试上限次数后,服务器端断开本次TCP连接,并限制此帐号连接请求。
基于密钥的认证:
客户端使用ssh-keygen工具在本地家目录的.ssh/目录下生成一对密钥(如:公钥id_rsa.pub、私钥id_rsa)。并将公钥追加保存到将要登录的服务器上的那个帐号家目录的.ssh/authorized_keys文件中。客户端使用算法协商阶段生成的会话密钥加密帐号、认证方法、公钥,并将其传送给服务器端。服务器端收到后将解密后的公钥与本地该帐号家目录下的authorized_keys中的公钥进行对比。如果内容不相同,认证失败,否则服务器端生成一段随机字符串,并先后用客户端公钥和会话密钥对其加密,发送给客户端。客户端收到后将解密后的随记字符串用会话密钥加密发送给服务器端。如果发回的字符串与服务器端起先生成的一样,则认证通过,否则,认证失败。
openssh便是SSH的一个开源实现。本文后续部分将简要介绍如何用openssh基于口令和密钥的远程登录。
示例:
# ssh root@172.29.166.218
如果是第一次登录远端主机,系统会出现以下提示:
因为协议本身无法确认远端服务器的真实性,用户自行根据提供的经SHA256算法提取的公钥指纹判断其真实性。如果确认为真,则输入帐号密码以登录服务器端。
a、首先在客户端生成一对密钥
示例:
b、将客户端公钥保存到服务器端
示例:
另外,可以不使用ssh-copy-id命令,改用以下命令,可以更好的理解公钥的保存过程:
c、登录验证
如果仍然无法无口令登录,请检查sshd配置文件/etc/ssh/sshd_config,并将以下几行前面的注释符号取消。
配置ssh远程登录
本地和远程服务器都创建
在创建密钥的时候,可以定义加密类型和长度,具体可以参考ssh-keygen命令帮助。创建的过程中,首先会提示你 保存的位置 和 文件名 ,再提示你 给密钥加个密码 ,也可以直接回车不要密码。
公钥和私钥默认保存这用户目录的 /.ssh/ 文件夹下。默认情况下, id_rsa 为私钥, id_rsa.pub 为公钥。
此时 还是需要用用户名和密码登录远程Linux服务器。使用vi编辑 /etc/ssh/sshd_config 文件,先打开 PubkeyAuthentication 和 PermitRootLogin ,一般只要把这几个参数前面的#(注释符)删掉即可。
重启ssh服务
在macOS端操作以下命令,把公钥上传到远程服务器,会提示输入远程的Linux服务器的密码。
在远程Linux服务器上,操作以下命令,把公钥 追加 到服务器ssh认证文件中:
如果没有 authorized_keys 这个文件,请到 .ssh 文件夹下创建一个,并把权限设置为600。
追加好后,如果要禁止用户名密码登录,再编辑 /etc/ssh/sshd_config 文件,把 PasswordAuthentication 设置为no。
重启SSH服务(每次修改ssh配置都需要重启)
如果没有设置密钥密码,直接这终端输入 ssh root@IP 即可登录远程服务器。如果该用户下没有公钥,则会提示Permission denied。
评论前必须登录!
注册