zoukankan      html  css  js  c++  java
  • ssh验证和端口转发

    ssh 服务登录验证

    	ssh 服务登录验证方式:
    		用户/ 口令
    		基于密钥
    	基于用户和口令登录验证
    		客户端发起ssh请求,服务器会把自己的公钥发送给用户
    		用户会根据服务器发来的公钥对密码进行加密
    		加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功
    	基于用户名口令登录验证
    
    	基于密钥的登录方式
    		1。首先在客户端生成一对密钥(ssh-keygen) 
    		2。并将客户端的公钥ssh-copy-id拷贝到服务端
    		3。 当客户端再次发送一个连接请求,包括ip 、用户名
    		4。 服务端得到客户端的请求后,会到authorized_keys中查找,如果有响应的IP和用户,就会随机生成一个字符串,例如:acdf
    		5。 服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端
    		6。 得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端
    		7。 服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录
    

    基于key 认证

    	ssh-keygen
    		ssh-keygen - authentication(证明)key generation, management and conversion(转化)
    			ssh-keygen [options]
    				-t type 	指定密钥创建的类型
    				-P 	phrase 提供老的密码
    				-f 	指定密钥文件
    				-p	更改私钥文件的密码
    				-i	导入到openssh密钥文件
    	ssh-copy-id
    		ssh-copy-id - install your public key in a remote machine’s authorized_keys
    		ssh-copy-id [-i [identity_file]] [user@]machine
    	ssh-add
    		ssh-add - adds private key identities to the authentication agent
    			ssh-add [-n [-T token]] [-e pkcs11] [-s pkcs11] [-cDdLlXx] [-t life] [file ...]
    	基于密钥的认证:
    		1。在客户端生成密钥对
    			ssh-keygen -t rsa [-P ''] [-f “~/.ssh/id_rsa"]
    		2。把公钥文件传输至远程服务器对应用户的家目录
    			ssh-copy-id [-i [identity_file]] [user@] host
    		3。测试,完成
    	可以给私钥加口令 :
    			ssh-keygen –p
    	私钥加口令后使用代理。
    		启动代理
    			ssh-agent bash
    		当你输入一次私钥的口令后,代理(authentication agent )保存口令,帮你下次自动登录,但当你注销后,代理程序关闭了。
    		要想再使用代理,就需要再此启动并ssh-add,才能有用。
    		在GNOME中,代理被自动提供给root用户,否则运行ssh-agent bash
    	私钥口令通过命令添加给代理
    		ssh-add
    	在SecureCRT或Xshell实现基于key验证
    		在SecureCRT 工具—> 创建公钥—> 生成Identity.pub 文件转化为openssh 兼容格式(适合SecureCRT ,Xshell 不需要转化格式),并复制到需登录主机上相应文件authorized_keys 中,注意权限 必须为600 ,在需登录的ssh 主机上执行:
    		ssh-keygen -i -f Identity.pub  >> .ssh/authorized_keys(secureCRT)
    

    SSH 端口转发

    	SSH 端口转发
    		SSH会自动加密和解密所有SSH客户端与服务端之间的网络数据。
    		但是,SSH 还能够将其他 TCP 端口的网络数据通过 SSH 链接来转发,并且自动提供了相应的加密及解密服务,这一 过程也被叫做“隧道”(tunneling )。
    		这是因为 SSH 为其他 TCP 链接提供了一个安全的通道来进行传输而得名,例如,Telnet、SMTP、LDAP 这些 TCP 应用均能够从中得益,可以避免用户名,密码以及隐私信息的明文传输。
    		与此同时, 如果工作环境中的防火墙限制了一些网络端口的使用,但是允许SSH的连接 ,也能够通过将 TCP 端口转发来使用 SSH 进行通讯
    			
    	SSH 端口转发能够提供两大功能:
    		加密SSH Client 端至 SSH Server端之间的通讯数据
    		突破防火墙的限制完成一些之前无法建立的TCP连接
    	本地转发:
    		-L localport:remotehost:remotehostport sshserver
    		选项:
    			-f  后台启用
    			-N  不打开远程shell ,处于等待状态
    			-g  启用网关功能
    		示例
    			A机器上为本地:
    				当你访问本机9527端口时,它会将请求转发到B的sshd服务器上,ssh服务器收到解密后,将其再转发到c的telnet服务器的23端口。
    			前提:C机器上telnet服务打开,A和B机器上sshd服务打开,本机防火墙关闭
    			ssh –L 9527:telnetsrvIP:23  -Nf sshsrvIP   (开通桥)
    			telnet 127.0.0.1 9527
    			data <- -> localhost:9527 <- -> localhost:XXXXX <- ->sshsrv:22 <- -> sshsrv:YYYYY <- -> telnetsrv:23
    	远程转发:
    		-R sshserverport:remotehost:remotehostport sshserver
    		示例:
    			
    			B机器为本机:
    				让A机器sshsrv侦听9527端口的访问,如有访问,A机器就加密后通过ssh服务转发请求到B本机ssh客户端,再由本机解密后转发到smtpsrv:25
    			ssh –R 9527:smtpsrvIP:25 –Nf sshsrvIP
    			Data <- ->  remotesshsrv:9527 <- ->  remotesshsrv:22 <- -> localhost:XXXXX <- -> localhost:YYYYY(随机端口) <- -> smtpsrv:25
    			
    	动态端口转发:
    		当用firefox访问internet 时,本机的1080端口做为代理服务器,firefox 的访问请求被转发到sshserver 上,由sshserver替之访问internet
    			在本机firefox 设置代理socket proxy:127.0.0.1:1080
    			ssh -D 1080 root@sshserver
    		curl  --proxy   
    

    X协议转发

    	所有图形化应用程序都是X客户程序
    		能够通过tcp/ip 连接远程X服务器
    		数据没有加密机,但是它通过ssh连接隧道安全进行
    	ssh -X user@remotehost gedit
    		remotehost主机上的gedit 工具,将会显示在本机的X服务器上
    		传输的数据将通过ssh连接加密
    
  • 相关阅读:
    linux常用命令
    Python 父类调用子类方法
    import win32api 安装pip install pypiwin32
    Python 封装DTU-215码流卡 第一天
    git apply -v 提示 Skipped patch 打不上patch的解决办法
    2019/10/29
    12/9/2019
    11/9/2019
    9/7/2019
    人生若有命中注定
  • 原文地址:https://www.cnblogs.com/shenxm/p/8448916.html
Copyright © 2011-2022 走看看