ssh简介与使用

ssh简介与使用,第1张

使用SSH的优点:
1)利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题,也能够防止DNS欺骗和IP欺骗。
2)使用SSH传输的数据是经过压缩的,所以可以加快传输的速度 。

但并不是说SSH就是绝对安全的,因为它本身提供两种级别的验证方法:

第一种级别(基于口令的安全验证):只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人攻击”这种方式的攻击。

第二种级别(基于密钥的安全验证):你必须为自己创建一对密钥,并把公钥放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密钥进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公钥,然后把它和你发送过来的公钥进行比较。如果两个密钥一致,服务器就用公钥加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私钥在本地解密再把它发送给服务器完成登录。与第一种级别相比,第二种级别不仅加密所有传输的数据,也不需要在网络上传送口令,因此安全性更高,可以有效防止中间人攻击。

1在客户端(本地)生成密钥对

密钥锁码在使用私钥时必须输入,这样就可以保护私钥不被盗用。当然,也可以留空,实现无密码登录,这里密钥锁码设置为空。完成上述步骤后,在 root 用户的家目录中生成了一个 ssh 的隐藏目录,内含两个密钥文件,其中id_rsa 为私钥,id_rsapub 为公钥。

如果能telnet不能ssh的话试试:
line vty 0 4
transport input ssh
如果telnet也不行的话就检查aaa和radius配置了
配置radius服务器:
radius-server host xxxx auth-port xxx acct-port xxx
aaa配置:
aaa authentication login xxx group radius local
确保radius服务器上有添加cisco设备的地址

1可密码、公私钥认证,实现sftp文件上传下载

2脚本

a显示命令行帮助:pythonsftp_downloaderpy-h

b运行:pythonsftp_downloaderpy-uzhangsan-ppassword-pkmy-openssh-private-key-sfmy-server-list-file-path-srcfthe-file-name-to-be-download-ddthe-file-dir-to-save_vote

c可把b中的命名设置成alias(windows平台我用的Cmder终端,可设置alias),使用就简单了

4脚本说明:

aargparse模块使用接收命令行参数,然后分别设置_vote_tie_follow来区分要下载不同类型的服务器日志与传不同的日志路径

beasylog模块,自己封装的日志模块

cgevent,对文件中的多个服务器地址使用协程来加快下载

dparamiko模块,核心使用,ssh连接认证

e只封装了下载,上传、执行服务器命令等可以自己再扩展

d当前只是为了满足方便使用,有很多地方可以调和纠错,指正。

:TLS/SSl(libssl,libcryto,openssl),TSL PKI

telnet,TCP/23,远程登录
认证明文(密码认证)
数据传输明文

ssh:Secure Shell ,TCP/22
C/S架构 套接字监听

SSH --> SSH

openssh(开源) 即是协议,又是软件

ssh V1(中间人攻击),V2

客户端:
LINUX:ssh
Windows:putty,SecureCRT(商业版),SSHsecureShellClient,Xmanger

服务器端:(linux,unix)
sshd

openssh(ssh,sshd)

ssh--->telnet

ssh:主机密钥
client-------->server
yes:接受服务器主机发来的公钥
RSA,DSA
客户端生成临时对称密钥(会话)随机生成
对称密钥使用服务器的公钥加密后传给服务器,只有服务器的私钥可以解密。

账号和密码用对称密钥加密后传给服务器进行认证。
认证通过,建立一个永久的会话通道。

基于口令的认证
基于密钥的认证

客户端生成一对密钥,公钥传到服务器的对应用户的家目录下,身份认证是客户端利用自己的私钥加密一段数据,服务器用客户的公钥解密。可解,则认证通过。

不允许root直接登录,而是用普通用户,在su切换。

一台主机为客户端(基于某个用户实现 ),

基于ssh的远程复制命令,可以实现在主机之间传输数据。

本文是笔者查阅网上资料做的总结,关于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

配置文件 /etc/ssh/sshd_config

/etc/ssh/

以密码认证方式登录到远程服务器(ssh服务端)
条件:
服务端有root用户
服务端开启了sshd服务,默认监听端口为22
客户端有个ssh客户端服务器

此时,当前用户的家目录 ssh 目录下就会有密钥对

公钥用于非密码认证方式时,传送给对方,作为信任的凭据。私钥会保存到本地

假如第一次链接会得到一个提示。
大致的意思就是,要不要信任ssh服务端的公钥。信任输入yes
此时,客户端回把服务端的公钥放在当前目录下的 ssh/known_hosts
文件中一行一个主机。

服务端设置 /etc/sshd_config

重启服务

检查监听端口

客户端连接

1延续上面的实验继续。
客户端需要发送自己的公钥给服务端,服务端接收后会保存在用户家目录中的ssh/authorized_keys文件中
验证登录
ssh root@100122133

假如指定端口

拷贝服务端文件到客户端
scp root@100122133:/tmp/local_filetxt
(注意最后的点 )
指定端口 -P 2222

华三交换机ssh服务异常
1 检查网络连接是否畅通
在客户端ping服务器的IP地址,检查客户端和服务器端的网络是否可用,排除因网络故障导致SSH连接不能建立的可能性。
2 检查服务器端是否开启SSH服务器功能
如果服务器端未开启SSH服务器功能,则客户端无法登录服务器。可以通过下述命令确认SSH服务器端是否开启了SSH服务器功能
3 检查版本是否匹配
服务器和客户端之间的版本不能协商成功,则连接无法建立。可以通过display ssh server status命令查看服务器上的SSH版本。
4 检查VTY用户界面配置是否正确
开启SSH服务器功能后,如果客户端登录服务器端时,未提示用户是否认可该服务器身份,就退出了登录,且服务器端没有任何调试输出,则可能是由于服务器端的VTY用户界面配置不正确导致的。
5 检查服务器公钥是否存在
为了防止“伪服务器欺骗”,客户端登录服务器端时,客户端通过数字签名的方法验证服务器的身份。如果客户端没有保存服务器的公钥或保存的服务器公钥不正确,则服务器身份验证将会失败,从而导致客户端无法登录服务器。因此,客户端登录服务器之前,需要先在服务器端创建密钥对,并将正确的服务器公钥保存在客户端。
6 检查服务器端是否存在该用户
客户端登录服务器时,提示用户反复输入密码,但是认证都不成功。该问题的原因可能是服务器端不存在该用户。
7 认证失败
客户端登录服务器时,提示用户反复输入密码,但是认证都不成功。该问题的原因也可能是
8 检查SSH用户服务类型配置是否正确
SSH用户服务类型包括Stelnet和SFTP两种。如果用户登录时使用的服务类型与服务器上配置的用户服务类型不一致,则用户登录会失败。
9 用户登录超时
服务器端打印如下调试信息后,用户退出登录。
10 检查SFTP工作目录配置是否正确
SSH用户服务类型为SFTP时,如果服务器上设置的SFTP用户工作目录不正确,则用户不能成功登录。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/13462846.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-12
下一篇 2023-08-12

发表评论

登录后才能评论

评论列表(0条)

保存