Error[8]: Undefined offset: 116, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

概述SSH介绍 SSH是Secure Shell Protocol的简写,由IETF网络工作小组(Network working Group)指定;在进行数据传输之前,SSH先对联机数据包通过加密技术进行 SSH介绍

SSH是Secure Shell Protocol的简写,由IETF网络工作小组(Network working Group)指定;在进行数据传输之前,SSH先对联机数据包通过加密技术进行加密处理,加密后在进行数据传输。确保了传递的数据安全.

SSH是专为远程登录会话和其他网络服务提供的安全性协议。利用SSH协议可以有效的放置远程管理过程中的信息泄露问题,在当前的生产环境运维工作中,绝大多数企业普遍采用SSH协议服务来代替传统的不安全的远程联机服务软件,如telnet(23端口,非加密)

在默认状态下,SSH服务主要提供了两个服务功能,一个是提供类似Telnet远程联机服务器的服务,即上面提到的SSH服务;另一个是类似FTP服务的sftp-server,借助SSH协议来传输数据的,提供更安全的SFTP服务(vsftp,proftp

ssh 客户端(ssh命令)还包含一个远程安全拷贝命令scp,也是通过ssh协议工作.

小结

# 1、SSH是安全的加密协议,用于远程连接linux服务器# 2、SSH默认端口是22,安全协议版本SSH2,除了2之外还有SSH1(漏洞)# 3、SSH服务端主要包含两个服务协议SSH远程连接,SFTP服务# 4、linux SSH客户端包含ssh远程连接命令,以及远程拷贝scp命令
SSH结构
# SSH服务由服务端软件OpenSSH (openssl)# 客户端(常见的有SSH(linux),SecureCRT,Putty,Xshell)组成# SSH服务默认使用22端口提供服务,它有两个不兼容的SSH协议版本分别是1.x和2.xrpm -qa opensshopenssh-6.6.1p1-31.el7.x86_64		# 远程连接安装包rpm -qa opensslopenssl-1.0.2k-19.el7.x86_64		# 加密安装包

OpenSSH同时支持SSH 1.x2.x 用SSH 2.x的客户端程序不能链接到SSH1.x的服务程序上

SSH服务是一个守护进程(daemon),他在后台运行并响应来自客户端的连接请求,SSH服务端的进程名为sshd,负责实时监听远程SSH客户端的连接请求,并进行处理,一般包括公共密钥认证、密钥交换、对称密钥加密和非安全连接等。

SSH客户端包含ssh以及像scp(远程拷贝)slogin(远程登录)sftp(安全FTP文件传输)等应用程序

SSH的工作机制大致是本地的ssh客户端发送一个连接请求到远程的ssh服务器,服务器检查连接的客户端发送的数据包和ip地址,如果确认合法,就会发送密钥给SSH的客户端,此时,客户端本地再将密钥发回给服务端,自己建立连接。SSH1.x和SSH2.x在连接协议上有一些安全方面的差异

SSH加密技术

SSH加密技术是将人类可以看得懂的数据,通过一定的特殊的程序算法,把这些数据变成杂乱的无意义的信息,然后,通过网络进行传输,二挡到了目的地后,在通过对应的解密算法,把传过来的加密的数据信息解密成加密前的可读取的正常数据。因此,当数据在互联网上传输时即使被有心的黑客监听窃取了,也很难获取到真正需要的数据

网络上的数据包加密技术一般是通过所谓的一对公钥私钥(Public key and Pivate key)组合撑的密钥对进行加密解密 *** 作。

SSH 1.x

每一台SSH服务器主机都可以使用RSA加密方式来产生一个1024-bit的RSA Key 这个RSA的加密方式就是用来产生公钥和私钥的算法之一。

当服务动时,就会产生一个768 bit的临时公钥存放在Server

grep ServerKey /etc/ssh/sshd_config #ServerKeyBits 1024
SSH 2.x

SSH 1.x的联机过程中,当Server接收Clinet端Private Key后,就不再针对该次联机的Key pair进行检验。若此时有而已黑客对该联机key pair插入而已的程序代码时,由于服务端你不会在检验联机的正确性,因此可能会接收该程序代码,从而导致系统被黑.

为了改正这个缺点,SSH version2多加了一个确认联机正确性的DiffIE-Hellman机制

在每次数据传输中,Server都会以该机制检查数据的来源是否正确,这样,可以避免联机过程中被插入而已程序代码的问题

另外,SSH2同时支持RSADSA密钥,但是SSH1仅支持RSA密钥

由于SSH1协议本身存在较大问题,建议使用SSH2的联机模式

当ClIEnt端SSH联机请求传送过来时,Server就会将这个768-bit的公钥传给ClIEnt端

此时ClIEnt会将此公钥与先前存储的公钥进行对比,看是否一致,判断标准是ClIEnt端联机用户目录下~/.ssh/kNown_hosts文件的内容(linux-客户端

不加用户默认是root 不加-p 指定端口 默认是22`

ssh -p22222 root@39.108.140.0The authenticity of host '39.108.140.0 (39.108.140.0)' can't be established.ECDSA key fingerprint is 17:33:ef:9b:05:b3:69:d3:20:48:49:e1:28:9b:7c:c8.Are you sure you want to continue connecting (yes/no)? # 连接密码文件存放路径cat /root/.ssh/kNown_hosts 121.36.43.223 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBDgQ7H6KDIPTzOklwMSOxgFI0Xc3rgvwPnCliuXIuzaCfYQBouM6owCArpj2CXEyk40lSn96ktW1vETbP1JmjEY=# 第一次SH连接的时候,本地会产生一个密钥文件~/.ssh/kNown_hosts
如何防止SSH登录入侵
# 1、用密钥登录,不用密码登录# 2、牤牛阵法:解决SSH安全问题# 3、防火墙封闭SSH,指定源限制(局域网,信任公网)# 4、开启SSH只监听本地内网IP(ListenAddress 10.0.0.8)# 5、尽量不给服务器外网IP
SSH客户端附带的scp命令

scp的基本语法使用:scp -sercure copyremote file copy program

推push

scp -P22 -rp /root/test.txt root@39.108.140.0:/root/

拉pull

scp -p22 -rp root@39.108.140.0:/root/test.txt ./# -P 指定端口,默认22,可忽略# -p 表示拷贝前后保持文件或目录属性# -r 递归,表示拷贝目录# -l 限制速度# 小结# 1、scp是加密的远程拷贝,而cp仅为本地拷贝# 2、可以把数据从一台机器推送到另一台机器,也可以从其他服务器把数据拉回到本地执行命令的服务器# 3、每次都是全量完成拷贝,因此效率不高,适合第一次拷贝用,如果需要增量拷贝,用rsync
ssh服务附带的sftp功能服务
# 1. rz,sz(lrzsz)# 2. winscp WinSCP-v4.0.5 基于SSH,sftp# 3. SFX(xshell) 4) SFTP 基于SSH加密传输# 4. samba,http,ftp,nfs# FTP工具:vsftp、proftpd、SFTP# linux sftp客户端登录sftp服务方法# 登录FTP的方法就是sftp -oPort=22 root@39.108.140.0:sftp> put test.txtUploading test.txt to /root/test.txttest.txt                                          100%    0     0.0KB/s   00:00                                   sftp> ls test.txt test.txt
SSH服务认证类型介绍基于口令安全认证

基于口令的安全验证的方式就是大家现在一直在用的,只要知道服务器的SSH端口号口令,应服务器的IP及开放的端口,默认都为22,就可以通过ssh客户端登录到主机,此时联机过程中所有传输都是加密

基于密钥的安全验证

基于密钥的安全验证方式是指,需要依靠密钥,也就是必须事先建立一对密钥,然后把公用密钥(Publickey)放在需要访问的目标服务器上,另外,个还需要把私有密钥(Private key)放到SSH客户端或对应的客户端服务器上

此时,如果要想连接到这个带有公用密钥的SSH服务器,客户端SSH软件或者客户端端服务就会想SSH服务端发出请求,请求用联机用户密钥进行安全连接。SSH服务会在收到请求之后,会现在改SSH服务器上连接的用户的加密路下 放上去的对应用户密钥,然后把它和连接的SSH客户端发来进行密钥,如果两个密钥一直SSH服务就会用公用密钥加密“质询”(challenge)并把它发送给SSH客户端

更改ssh 默认登录配置

修改SSH服务的运行参数,是通过修改配置文件/etc/ssh/sshd_config实现的

一般来说SSH服务使用默认的配置已经够很好的工作,如果对安全要求不高,仅仅提供SSH服务的情况不需要修改任何配置

sshd_config配置文件说明:

优化SSH配置文件选项
cp /etc/ssh/sshd_config{,.bak}vim /etc/ssh/sshd_configPort 52113              # ssh连接端口默认为22,修改端口号可以提高级别PermitRootLogin no      # 禁止root远程登录PermitEmptyPasswords no # 禁止空密码的用户登录UsednS no               # 不使用DNS进行解析GSSAPIAuthentication no # 会导致SSH连接慢# ssh远程连接服务满解决方法sed -ri '13 iPort 52113\nPermitRootLogin no\nPermitEmptyPasswords no\nUsednS no\nGSSAPIAuthentication no' /etc/ssh/sshd_config
SSH优化优化sshd_config
sed -i '13 iPort 52113\nPermitRootLogin no   \n   禁止root登录PermitEmptyPasswords no \n      #        禁止使用密码UsednS no\n                     # 禁用DNSGSSAPIAuthentication no'        #        禁用GSSAPIsshd_config
检查hosts解析
cat >>/etc/hosts <<EOF39.108.140.0 blog149.129.38.117 blog2121.36.43.223 huawei 49.233.69.195 tenxun 116.196.83.113 jd EOFuseradd oldboyecho "123456"|passwd --stdin youmensu – youmenssh-keygen -t dsa   //非交互式创建密钥  #ssh-keygen是生产密钥的工具 -t参数是指定密钥的类型,这里是建立dsa类型密钥#也可以使用ssh-keygen -t rsa来建立rsa类型密钥#RSA与DSA加密算法的区别#RSA:是一种加密算法(PS:RSA也可以进行数字签名的)它的简写的来由是RonRivest、Adi Shamir和LeonAdleman 这三个姓氏加在一起就是RSA#DSA就是数字签名算法的英文全称的简写,即Digital Sigenature Algorithm=DSA# RSA既可以进行加密,也可以进行数字签名实现认证,而DSA只能用于数字签名
@H_117_301@分发密钥
yum -y install sshpassssh-keygen -t rsa -P '' -f ~/.ssh/ID_dsa &>/dev/nullsshpass -p youmen ssh -o StrictHostKeyChecking=no  root@192.168.43.159# 一键生成密钥对ssh-keygen -t dsa -P '' -f ~/.ssh/ID_dsa >/dev/null 2>&1ssh-copy-ID -i /root/.ssh/ID_dsa.pub root@192.168.43.159# -i 代表要发送的文件# ssh-copy-ID 只能发公钥,不能发私钥# 1 免密码登录是单向的,方向从私钥(钥匙)==》公钥(锁)# 2 SSH免密码登录基于用户的,最好不要跨不同的用户# 3 ssh连接慢的问题解决
ssh批量管理步骤
# 1、ssh优化和hosts解析# 2、创建用户# 3、生成密钥对# 4、分发公钥到所有服务器 ssh-copy-ID# 5、测试 远程连接ssh 远程执行命令ssh ifconfig# 远程拷贝文件scp rsync-e隧道模式
ssh常见 *** 作将本地hosts发送指定IP

1. sudo提权实现没有权限用户拷贝

echo“youmenALL= nopASSWD:/usr/bin/rsync ”>>/etc/sudoersvisudo -c scp -P52113 hosts oldboy@192.168.43.159:~	# 最好发送到家目录下,直接发送到/下是没有权限ssh -p22 -t youmen@192.168.43.159 sudo rsync ~/hosts /etc/hosts# 需要授权sudo权限

2. 使用suID实现没有权限用户拷贝

chmod u+s `which rsync`scp -P22 hosts oldboy@192.168.43.159:~ssh -p22 youmen@192.168.43.159 rsync ~/hosts  /etc/hosts

3. 使用root进行 *** 作

# rsync使用rsync -avz hosts -e ‘ssh -p 22’youmen@192.168.43.159:~# 可以增量备份
查看hosts主机系统版本
 cat vIEw.sh #!/bin/shfor n in blog2 tenxun jd huawei do  echo -n "====$n===="	  ssh -p 22 $n 		done[root@Nginx_test ~]# sh vIEw.sh "cat /etc/redhat-release"====blog2====CentOS linux release 7.3.1611 (Core) ====tenxun====CentOS linux release 7.6.1810 (Core) ====jd====CentOS linux release 7.6.1810 (Core) ====huawei====CentOS linux release 7.4.1708 (Core) 
分发文件
cat file.sh #!/bin/sh. /etc/init.d/functionsif [ $# -ne 1 ];then     echo "USAGE:/bin/sh # 1. 加密SSH ClIEnt端至SSH Server端之间的通讯数据。# 2. 突破防火墙的简直完成一些之前无法建立的TCP连接。 filename"	$    exit 1    fifor n in blog2 tenxun jd huawei do  echo -n "====$n===="	  scp -P22   $n: &>/dev/null  if [ $? -eq 0 ];then      action "dis  to $n" /bin/trueelse      action "$n" /bin/falsefidonesh file.sh /etc/hosts====blog2====dis /etc/hosts to blog2                       [  OK  ]====tenxun====dis /etc/hosts to tenxun                     [  OK  ]====jd====dis /etc/hosts to jd                             [  OK  ]====huawei====dis /etc/hosts to huawei                     [  OK  ]
SSH端口转发简介

SSH会自动加密和解密所有SSH客户端与服务端之间的网络数据。但是,SSH还能够将其他TCP端口的网络数据通SSH链接来转发,并且自动提供了相应的加密及解密服务。这一过程也被叫做"隧道"(tunneling),这是因为SSH为其他TCP链接提供了一个安全的通道来进行传输而得名。例如,Telnet ,SMTP ,LDAP这些TCP应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输。而与此同时,如果工作环境许中的防火墙限制了一些网络端口的使用,但是允许SSH的连接,也能够将通过将TCP用端口转发来使用SSH进行通讯。

SSH端口转发两大功能
命令 -L localport:remotehost:remotehostport sshserver
本地转发

说明

localport      # 本机开启的端口号remotehost      # 最终连接机器的IP地址remotehostport # 转发机器的端口号sshserver      # 转发机器的IP地址# -L 本机端口# -f 后台启用,可以在本机直接执行命令,无需另开新终端# -N 不打开远程shell,处于等待状态,不跳到远程主机,还在主机上,只是搭好了隧道,桥搭好,不ssh上去# -g 启用网关功能# -R 服务端口# 举例:ssh –L 9527:telnetsrv:23 -N sshsrvtelnet 127.0.0.1 9527# 当访问本机的9527的端口时,被加密后转发到sshsrv的ssh服务,再解密被转发到telnetsrv:23data < >localhost:9527 < > localhost:XXXXX < > sshsrv:22 < > sshrv:yyyyy < > telnetsrv:23

CentOS7-A
环境背景

背景:企业内部C服务器只允许telnet连接(23端口)访问,不允许外部直接访问,B服务器是一个ssh服务器;有一个用户需要从外部连接到企业内部的C服务器。

前提:防火墙允许22端口进来(或者企业内部有一个堡垒机,ssh -t通过堡垒机进去)。

原理: 数据一旦telnet以后,数据会发送到本机9527端口,再在本机开一个随机端口,充当ssh客户端,再把数据流量发送到22端口的ssh服务端,收到数据以后,解密数据,临时开一个随机端口充当客户端,再把流量发送到23端口telnet服务端

机器: blogA用户,huawei模拟B机器,tenxun模拟C机器

@H_868_403@@H_798_404@节点名@H_798_404@IP@H_798_404@软件版本@H_798_404@硬件@H_798_404@网络@H_798_404@说明@H_868_403@@H_868_403@@H_868_403@# ssh协议里面封装了telnet,一旦A连接了B主机,立即使用telnet连接C主机,此过程可以突破防火墙的限制# 实验#  A->C 访问被限制# A-B->C  使用B主机作为跳板突破访问限制
39.108.140.01C2G公有云阿里云CentOS6-B
121.36.43.2231C2G公有云华为云CentOS6-C
49.233.69.1951C2G公有云腾讯云

C机器通过iptables拒绝A机器登录
配置步骤

[root@C ~]# iptables -A input -s 39.108.140.0 -j REJECT[root@C ~]# yum -y install telnet-server xinetd[root@C ~]# systemctl start telnet.socket[root@C ~]# systemctl start xinetd[root@C ~]# ss -tnl |grep 23ListEN 0 128 [::]:23 [::]:* # 此时我们A机器是直接连接不上C机器的[root@A ~]# ssh 49.233.69.195ssh: connect to host 49.233.69.195 port 22: Connection refused# 开启端口转发(telnet隧道)[root@A ~]# ssh -L 10000:49.233.69.195:23 -Nf 121.36.43.223# 通过本地9527端口访问centos6-1服务器IP地址使用telnet协议23端口,跳板机ip地址# 隧道已经搭建好了,此时A主机可以通过telnet访问C主机telnet 127.0.0.1 10000Trying 127.0.0.1...Connected to 127.0.0.1.Escape character is '^]'.Kernel 3.10.0-1062.9.1.el7.x86_64 on an x86_64c login: youmenPassword: Last login: Fri Jun 12 22:32:04 from centos-b[root@C ~]$# 如何需要删除这个连接使用killall ssh即可killall ssh # 删除搭建的桥telnet 127.0.0.1 10000Trying 127.0.0.1...telnet: connect to address 127.0.0.1: Connection refused

远程转发机制
远程转发

# -R sshserverport:remotehost:remotehostportsshserver# 举例ssh–R 9527:telnetsrv:23 –N sshsrv# 让sshsrv侦听9527端口的访问,如有访问,就加密后通过ssh服务转发请求到本机ssh客户端,再由本机解密后转发到telnetsrv:23Data < > sshsrv:9527 < > sshsrv:22 < > localhost:XXXXX < > localhost:YYYYY< >telnetsrv:23# 需求:# 在A(Centos7)上开启smtp服务(postfix),B(Centos6)做跳板,C(Centos6-1)客户端给Centos7发送邮件# 流程解释C-x->A (拒绝访问)C-B->A (通过远程代理,接受访问)

环境依然是上面三台机器,只是C服务器换成116.196.83.113 (JD)这台服务器

[root@A ~]# vim /etc/postfix/main.cf # inet_interfaces = localhost # 注释此行,不让接口直接绑定在127.0.0.1上[root@A ~]# systemctl restart postfix[root@A ~]# ss -tnl |grep 25ListEN 0 100 *:25 *:* ListEN 0 100 :::25 :::* [root@A ~]# yum -y install telnet-server[root@A ~]# systemctl start telnet.socket# 如果B上面有一些影响的防火墙规则就将它删掉[root@B ~]# iptables -nL --line-number[root@B ~]# iptables -D input 1# 测试下C能不能telnet 25端口连接A[root@C ~]# 39.108.140.0 25Trying 39.108.140.0...Connected to 39.108.140.0.Escape character is '^]'.220 Nginx_test.localdomain ESMTP Postfix# 设置防火墙策略,使A不接受C的一切请求[root@A ~]# iptables -A input -s 39.108.140.0 -j REJECT[root@C ~]# telnet 39.108.140.0 25Trying 39.108.140.0...telnet: connect to address 39.108.140.0: Connection refused# 使用B远程转发,发送邮件到[root@B ~]# ssh-copy-ID root@116.196.83.113:# 使用B远程转发,发送邮件到A,最好免密,否则需要手动口令验证[root@B ~]# ssh -R 50000:39.108.140.0:25 -fN 121.36.43.223# 此时可以到C跳板机看到已经有端口在监听了[root@C ~]# ss -tnl |grep 50000ListEN 0 128 127.0.0.1:50000 *:* [root@C ~]# telnet 127.0.0.1 5000Trying 127.0.0.1...telnet: connect to address 127.0.0.1: Connection refused[root@zabbix ~]# telnet 127.0.0.1 50000Trying 127.0.0.1...Connected to 127.0.0.1.Escape character is '^]'.220 Nginx_test.localdomain ESMTP Postfixmail from:youmen@163.com 250 2.1.0 Ok

配置步骤
下载地址
@H_900_502@openssh升级

# 记录sshd.pID路径find / -name sshd.pID# 查看openssh现有版本ssh -V# 使用rpm删除现有的opensshrpm -e --nodeps $(rpm -qa | grep openssh)# 删除旧的配置文件rm -rf /etc/ssh/*# 安装openssl-develyum -y install openssl-devel# 下载tar.gz包,配置编译,安装wget http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.0p1.tar.gz# 编译并安装tar xvf openssh-8.0p1.tar.gz cd openssh-8.0p1./configure --prefix=/usr/ --sysconfdir=/etc/ssh/ --with-ssl-dir=/etc/ssl --with-md5-passwords --mandir=/usr/share/man/make && make install# 设置ssh服务开机自启动# 复制启动文件至/etc/init.d/cp -a contrib/redhat/sshd.init /etc/init.d/sshd # 编辑/etc/init.d/sshd文件,将PID_file改为之前记下的sshd.pID路径 sed -i "s/PID_file=\/var\/run\/sshd.pID/PID_file=\/run\/sshd.pID/" /etc/init.d/sshd # 设置开机启动sshd chkconfig sshd on chkconfig --List sshd # 编辑/etc/ssh/sshd_config,设置一些常用参数sed -i "s/#PermitRootLogin prohibit-password/PermitRootLogin yes/" /etc/ssh/sshd_configsed -i "s/#PubkeyAuthentication yes/PubkeyAuthentication yes/" /etc/ssh/sshd_configsed -i "s/#PasswordAuthentication yes/PasswordAuthentication yes/" /etc/ssh/sshd_configsed -i "s/#AllowTcpForwarding yes/AllowTcpForwarding yes/" /etc/ssh/sshd_configsed -i "s/#X11Forwarding no/X11Forwarding yes/" /etc/ssh/sshd_configsed -i "s/#PIDfile \/var\/run\/sshd.pID/PIDfile \/run\/sshd.pID/" /etc/ssh/sshd_config# 加入系统服务cat > /usr/lib/systemd/system/sshd.service << EOF[Unit]Description=OpenSSH server daemondocumentation=man:sshd(8) man:sshd_config(5)#After=network.target sshd-keygen.service#Wants=sshd-keygen.serviceAfter=network.target[Service]ExecStart=/usr/sbin/sshd[Install]WantedBy=multi-user.targetEOF# 启用sshd服务systemctl enable sshd# 重启服务systemctl restart sshd# 查看服务状态systemctl status sshd# 验证ssh -VOpenSSH_8.0p1,OpenSSL 1.0.2k-fips 26 Jan 2017

http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/

具体升级步骤
到/etc/motd里面编写内容,看个人爱好
SSH设置登录欢迎信息

[root@Nginx_test ~]# cat /etc/motd   /\/\  (_人|人_)   /‥\  ミ(_Y_)ミ   > <  (/ \)  _(   )_ (_>―<_)# 关闭当前会话再登录  /\/\  (_人|人_)   /‥\  ミ(_Y_)ミ   > <  (/ \)  _(   )_ (_>―<_)[root@Nginx_test ~]#

┴┬┴┬/ ̄\_/ ̄\   ┬┴┬┴▏  ▏▔▔▔▔\   ┴┬┴/\ /      ﹨   ┬┴∕       /   )   ┴┬▏        ●  ▏   ┬┴▏           ▔█    ┴◢██◣     \___/   ┬█████◣       /     ┴█████████████◣   ◢██████████████▆▄   █◤◢██◣◥█████████◤\   ◥◢████ ████████◤   \   ┴█████ ██████◤      ﹨   ┬│   │█████◤        ▏   ┴│   │              ▏   ┬ ∕    ∕    /▔▔▔\     ∕   ┴/___/﹨   ∕     ﹨  /\   ┬┴┬┴┬┴\    \      ﹨/   ﹨   ┴┬┴┬┴┬┴ \___\     ﹨/▔\﹨ ▔\   ▲△▲▲╓╥╥╥╥╥╥╥╥\   ∕  /▔﹨/▔﹨      **╠╬╬╬╬╬╬╬╬*﹨  /  //
小熊图案
[+++]
总结

以上是内存溢出为你收集整理的SSH原理常见应用升级及端口转发全部内容,希望文章能够帮你解决SSH原理常见应用升级及端口转发所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 166, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
SSH原理常见应用升级及端口转发_系统运维_内存溢出

SSH原理常见应用升级及端口转发

SSH原理常见应用升级及端口转发,第1张

概述SSH介绍 SSH是Secure Shell Protocol的简写,由IETF网络工作小组(Network working Group)指定;在进行数据传输之前,SSH先对联机数据包通过加密技术进行 SSH介绍

SSH是Secure Shell Protocol的简写,由IETF网络工作小组(Network working Group)指定;在进行数据传输之前,SSH先对联机数据包通过加密技术进行加密处理,加密后在进行数据传输。确保了传递的数据安全.

SSH是专为远程登录会话和其他网络服务提供的安全性协议。利用SSH协议可以有效的放置远程管理过程中的信息泄露问题,在当前的生产环境运维工作中,绝大多数企业普遍采用SSH协议服务来代替传统的不安全的远程联机服务软件,如telnet(23端口,非加密)

在默认状态下,SSH服务主要提供了两个服务功能,一个是提供类似Telnet远程联机服务器的服务,即上面提到的SSH服务;另一个是类似FTP服务的sftp-server,借助SSH协议来传输数据的,提供更安全的SFTP服务(vsftp,proftp

ssh 客户端(ssh命令)还包含一个远程安全拷贝命令scp,也是通过ssh协议工作.

小结

# 1、SSH是安全的加密协议,用于远程连接linux服务器# 2、SSH默认端口是22,安全协议版本SSH2,除了2之外还有SSH1(漏洞)# 3、SSH服务端主要包含两个服务协议SSH远程连接,SFTP服务# 4、linux SSH客户端包含ssh远程连接命令,以及远程拷贝scp命令
SSH结构
# SSH服务由服务端软件OpenSSH (openssl)# 客户端(常见的有SSH(linux),SecureCRT,Putty,Xshell)组成# SSH服务默认使用22端口提供服务,它有两个不兼容的SSH协议版本分别是1.x和2.xrpm -qa opensshopenssh-6.6.1p1-31.el7.x86_64		# 远程连接安装包rpm -qa opensslopenssl-1.0.2k-19.el7.x86_64		# 加密安装包

OpenSSH同时支持SSH 1.x2.x 用SSH 2.x的客户端程序不能链接到SSH1.x的服务程序上

SSH服务是一个守护进程(daemon),他在后台运行并响应来自客户端的连接请求,SSH服务端的进程名为sshd,负责实时监听远程SSH客户端的连接请求,并进行处理,一般包括公共密钥认证、密钥交换、对称密钥加密和非安全连接等。

SSH客户端包含ssh以及像scp(远程拷贝)slogin(远程登录)sftp(安全FTP文件传输)等应用程序

SSH的工作机制大致是本地的ssh客户端发送一个连接请求到远程的ssh服务器,服务器检查连接的客户端发送的数据包和ip地址,如果确认合法,就会发送密钥给SSH的客户端,此时,客户端本地再将密钥发回给服务端,自己建立连接。SSH1.x和SSH2.x在连接协议上有一些安全方面的差异

SSH加密技术

SSH加密技术是将人类可以看得懂的数据,通过一定的特殊的程序算法,把这些数据变成杂乱的无意义的信息,然后,通过网络进行传输,二挡到了目的地后,在通过对应的解密算法,把传过来的加密的数据信息解密成加密前的可读取的正常数据。因此,当数据在互联网上传输时即使被有心的黑客监听窃取了,也很难获取到真正需要的数据

网络上的数据包加密技术一般是通过所谓的一对公钥私钥(Public key and Pivate key)组合撑的密钥对进行加密解密 *** 作。

SSH 1.x

每一台SSH服务器主机都可以使用RSA加密方式来产生一个1024-bit的RSA Key 这个RSA的加密方式就是用来产生公钥和私钥的算法之一。

当服务动时,就会产生一个768 bit的临时公钥存放在Server

grep ServerKey /etc/ssh/sshd_config #ServerKeyBits 1024
SSH 2.x

SSH 1.x的联机过程中,当Server接收Clinet端Private Key后,就不再针对该次联机的Key pair进行检验。若此时有而已黑客对该联机key pair插入而已的程序代码时,由于服务端你不会在检验联机的正确性,因此可能会接收该程序代码,从而导致系统被黑.

为了改正这个缺点,SSH version2多加了一个确认联机正确性的DiffIE-Hellman机制

在每次数据传输中,Server都会以该机制检查数据的来源是否正确,这样,可以避免联机过程中被插入而已程序代码的问题

另外,SSH2同时支持RSADSA密钥,但是SSH1仅支持RSA密钥

由于SSH1协议本身存在较大问题,建议使用SSH2的联机模式

当ClIEnt端SSH联机请求传送过来时,Server就会将这个768-bit的公钥传给ClIEnt端

此时ClIEnt会将此公钥与先前存储的公钥进行对比,看是否一致,判断标准是ClIEnt端联机用户目录下~/.ssh/kNown_hosts文件的内容(linux-客户端

不加用户默认是root 不加-p 指定端口 默认是22`

ssh -p22222 root@39.108.140.0The authenticity of host '39.108.140.0 (39.108.140.0)' can't be established.ECDSA key fingerprint is 17:33:ef:9b:05:b3:69:d3:20:48:49:e1:28:9b:7c:c8.Are you sure you want to continue connecting (yes/no)? # 连接密码文件存放路径cat /root/.ssh/kNown_hosts 121.36.43.223 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBDgQ7H6KDIPTzOklwMSOxgFI0Xc3rgvwPnCliuXIuzaCfYQBouM6owCArpj2CXEyk40lSn96ktW1vETbP1JmjEY=# 第一次SH连接的时候,本地会产生一个密钥文件~/.ssh/kNown_hosts
如何防止SSH登录入侵
# 1、用密钥登录,不用密码登录# 2、牤牛阵法:解决SSH安全问题# 3、防火墙封闭SSH,指定源限制(局域网,信任公网)# 4、开启SSH只监听本地内网IP(ListenAddress 10.0.0.8)# 5、尽量不给服务器外网IP
SSH客户端附带的scp命令

scp的基本语法使用:scp -sercure copyremote file copy program

推push

scp -P22 -rp /root/test.txt root@39.108.140.0:/root/

拉pull

scp -p22 -rp root@39.108.140.0:/root/test.txt ./# -P 指定端口,默认22,可忽略# -p 表示拷贝前后保持文件或目录属性# -r 递归,表示拷贝目录# -l 限制速度# 小结# 1、scp是加密的远程拷贝,而cp仅为本地拷贝# 2、可以把数据从一台机器推送到另一台机器,也可以从其他服务器把数据拉回到本地执行命令的服务器# 3、每次都是全量完成拷贝,因此效率不高,适合第一次拷贝用,如果需要增量拷贝,用rsync
ssh服务附带的sftp功能服务
# 1. rz,sz(lrzsz)# 2. winscp WinSCP-v4.0.5 基于SSH,sftp# 3. SFX(xshell) 4) SFTP 基于SSH加密传输# 4. samba,http,ftp,nfs# FTP工具:vsftp、proftpd、SFTP# linux sftp客户端登录sftp服务方法# 登录FTP的方法就是sftp -oPort=22 root@39.108.140.0:sftp> put test.txtUploading test.txt to /root/test.txttest.txt                                          100%    0     0.0KB/s   00:00                                   sftp> ls test.txt test.txt
SSH服务认证类型介绍基于口令安全认证

基于口令的安全验证的方式就是大家现在一直在用的,只要知道服务器的SSH端口号口令,应服务器的IP及开放的端口,默认都为22,就可以通过ssh客户端登录到主机,此时联机过程中所有传输都是加密

基于密钥的安全验证

基于密钥的安全验证方式是指,需要依靠密钥,也就是必须事先建立一对密钥,然后把公用密钥(Publickey)放在需要访问的目标服务器上,另外,个还需要把私有密钥(Private key)放到SSH客户端或对应的客户端服务器上

此时,如果要想连接到这个带有公用密钥的SSH服务器,客户端SSH软件或者客户端端服务就会想SSH服务端发出请求,请求用联机用户密钥进行安全连接。SSH服务会在收到请求之后,会现在改SSH服务器上连接的用户的加密路下 放上去的对应用户密钥,然后把它和连接的SSH客户端发来进行密钥,如果两个密钥一直SSH服务就会用公用密钥加密“质询”(challenge)并把它发送给SSH客户端

更改ssh 默认登录配置

修改SSH服务的运行参数,是通过修改配置文件/etc/ssh/sshd_config实现的

一般来说SSH服务使用默认的配置已经够很好的工作,如果对安全要求不高,仅仅提供SSH服务的情况不需要修改任何配置

sshd_config配置文件说明:

优化SSH配置文件选项
cp /etc/ssh/sshd_config{,.bak}vim /etc/ssh/sshd_configPort 52113              # ssh连接端口默认为22,修改端口号可以提高级别PermitRootLogin no      # 禁止root远程登录PermitEmptyPasswords no # 禁止空密码的用户登录UsednS no               # 不使用DNS进行解析GSSAPIAuthentication no # 会导致SSH连接慢# ssh远程连接服务满解决方法sed -ri '13 iPort 52113\nPermitRootLogin no\nPermitEmptyPasswords no\nUsednS no\nGSSAPIAuthentication no' /etc/ssh/sshd_config
SSH优化优化sshd_config
sed -i '13 iPort 52113\nPermitRootLogin no   \n   禁止root登录PermitEmptyPasswords no \n      #        禁止使用密码UsednS no\n                     # 禁用DNSGSSAPIAuthentication no'        #        禁用GSSAPIsshd_config
检查hosts解析
cat >>/etc/hosts <<EOF39.108.140.0 blog149.129.38.117 blog2121.36.43.223 huawei 49.233.69.195 tenxun 116.196.83.113 jd EOFuseradd oldboyecho "123456"|passwd --stdin youmensu – youmenssh-keygen -t dsa   //非交互式创建密钥  #ssh-keygen是生产密钥的工具 -t参数是指定密钥的类型,这里是建立dsa类型密钥#也可以使用ssh-keygen -t rsa来建立rsa类型密钥#RSA与DSA加密算法的区别#RSA:是一种加密算法(PS:RSA也可以进行数字签名的)它的简写的来由是RonRivest、Adi Shamir和LeonAdleman 这三个姓氏加在一起就是RSA#DSA就是数字签名算法的英文全称的简写,即Digital Sigenature Algorithm=DSA# RSA既可以进行加密,也可以进行数字签名实现认证,而DSA只能用于数字签名
@H_117_301@分发密钥
yum -y install sshpassssh-keygen -t rsa -P '' -f ~/.ssh/ID_dsa &>/dev/nullsshpass -p youmen ssh -o StrictHostKeyChecking=no  root@192.168.43.159# 一键生成密钥对ssh-keygen -t dsa -P '' -f ~/.ssh/ID_dsa >/dev/null 2>&1ssh-copy-ID -i /root/.ssh/ID_dsa.pub root@192.168.43.159# -i 代表要发送的文件# ssh-copy-ID 只能发公钥,不能发私钥# 1 免密码登录是单向的,方向从私钥(钥匙)==》公钥(锁)# 2 SSH免密码登录基于用户的,最好不要跨不同的用户# 3 ssh连接慢的问题解决
ssh批量管理步骤
# 1、ssh优化和hosts解析# 2、创建用户# 3、生成密钥对# 4、分发公钥到所有服务器 ssh-copy-ID# 5、测试 远程连接ssh 远程执行命令ssh ifconfig# 远程拷贝文件scp rsync-e隧道模式
ssh常见 *** 作将本地hosts发送指定IP

1. sudo提权实现没有权限用户拷贝

echo“youmenALL= nopASSWD:/usr/bin/rsync ”>>/etc/sudoersvisudo -c scp -P52113 hosts oldboy@192.168.43.159:~	# 最好发送到家目录下,直接发送到/下是没有权限ssh -p22 -t youmen@192.168.43.159 sudo rsync ~/hosts /etc/hosts# 需要授权sudo权限

2. 使用suID实现没有权限用户拷贝

chmod u+s `which rsync`scp -P22 hosts oldboy@192.168.43.159:~ssh -p22 youmen@192.168.43.159 rsync ~/hosts  /etc/hosts

3. 使用root进行 *** 作

# rsync使用rsync -avz hosts -e ‘ssh -p 22’youmen@192.168.43.159:~# 可以增量备份
查看hosts主机系统版本
 cat vIEw.sh #!/bin/shfor n in blog2 tenxun jd huawei do  echo -n "====$n===="	  ssh -p 22 $n 		done[root@Nginx_test ~]# sh vIEw.sh "cat /etc/redhat-release"====blog2====CentOS linux release 7.3.1611 (Core) ====tenxun====CentOS linux release 7.6.1810 (Core) ====jd====CentOS linux release 7.6.1810 (Core) ====huawei====CentOS linux release 7.4.1708 (Core) 
分发文件
cat file.sh #!/bin/sh. /etc/init.d/functionsif [ $# -ne 1 ];then     echo "USAGE:/bin/sh # 1. 加密SSH ClIEnt端至SSH Server端之间的通讯数据。# 2. 突破防火墙的简直完成一些之前无法建立的TCP连接。 filename"	$    exit 1    fifor n in blog2 tenxun jd huawei do  echo -n "====$n===="	  scp -P22   $n: &>/dev/null  if [ $? -eq 0 ];then      action "dis  to $n" /bin/trueelse      action "$n" /bin/falsefidonesh file.sh /etc/hosts====blog2====dis /etc/hosts to blog2                       [  OK  ]====tenxun====dis /etc/hosts to tenxun                     [  OK  ]====jd====dis /etc/hosts to jd                             [  OK  ]====huawei====dis /etc/hosts to huawei                     [  OK  ]
SSH端口转发简介

SSH会自动加密和解密所有SSH客户端与服务端之间的网络数据。但是,SSH还能够将其他TCP端口的网络数据通SSH链接来转发,并且自动提供了相应的加密及解密服务。这一过程也被叫做"隧道"(tunneling),这是因为SSH为其他TCP链接提供了一个安全的通道来进行传输而得名。例如,Telnet ,SMTP ,LDAP这些TCP应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输。而与此同时,如果工作环境许中的防火墙限制了一些网络端口的使用,但是允许SSH的连接,也能够将通过将TCP用端口转发来使用SSH进行通讯。

SSH端口转发两大功能
命令 -L localport:remotehost:remotehostport sshserver
本地转发

说明

localport      # 本机开启的端口号remotehost      # 最终连接机器的IP地址remotehostport # 转发机器的端口号sshserver      # 转发机器的IP地址# -L 本机端口# -f 后台启用,可以在本机直接执行命令,无需另开新终端# -N 不打开远程shell,处于等待状态,不跳到远程主机,还在主机上,只是搭好了隧道,桥搭好,不ssh上去# -g 启用网关功能# -R 服务端口# 举例:ssh –L 9527:telnetsrv:23 -N sshsrvtelnet 127.0.0.1 9527# 当访问本机的9527的端口时,被加密后转发到sshsrv的ssh服务,再解密被转发到telnetsrv:23data < >localhost:9527 < > localhost:XXXXX < > sshsrv:22 < > sshrv:yyyyy < > telnetsrv:23

CentOS7-A
环境背景

背景:企业内部C服务器只允许telnet连接(23端口)访问,不允许外部直接访问,B服务器是一个ssh服务器;有一个用户需要从外部连接到企业内部的C服务器。

前提:防火墙允许22端口进来(或者企业内部有一个堡垒机,ssh -t通过堡垒机进去)。

原理: 数据一旦telnet以后,数据会发送到本机9527端口,再在本机开一个随机端口,充当ssh客户端,再把数据流量发送到22端口的ssh服务端,收到数据以后,解密数据,临时开一个随机端口充当客户端,再把流量发送到23端口telnet服务端

机器: blogA用户,huawei模拟B机器,tenxun模拟C机器

@H_868_403@@H_798_404@节点名@H_798_404@IP@H_798_404@软件版本@H_798_404@硬件@H_798_404@网络@H_798_404@说明@H_868_403@@H_868_403@@H_868_403@# ssh协议里面封装了telnet,一旦A连接了B主机,立即使用telnet连接C主机,此过程可以突破防火墙的限制# 实验#  A->C 访问被限制# A-B->C  使用B主机作为跳板突破访问限制
39.108.140.01C2G公有云阿里云CentOS6-B
121.36.43.2231C2G公有云华为云CentOS6-C
49.233.69.1951C2G公有云腾讯云

C机器通过iptables拒绝A机器登录
配置步骤

[root@C ~]# iptables -A input -s 39.108.140.0 -j REJECT[root@C ~]# yum -y install telnet-server xinetd[root@C ~]# systemctl start telnet.socket[root@C ~]# systemctl start xinetd[root@C ~]# ss -tnl |grep 23ListEN 0 128 [::]:23 [::]:* # 此时我们A机器是直接连接不上C机器的[root@A ~]# ssh 49.233.69.195ssh: connect to host 49.233.69.195 port 22: Connection refused# 开启端口转发(telnet隧道)[root@A ~]# ssh -L 10000:49.233.69.195:23 -Nf 121.36.43.223# 通过本地9527端口访问centos6-1服务器IP地址使用telnet协议23端口,跳板机ip地址# 隧道已经搭建好了,此时A主机可以通过telnet访问C主机telnet 127.0.0.1 10000Trying 127.0.0.1...Connected to 127.0.0.1.Escape character is '^]'.Kernel 3.10.0-1062.9.1.el7.x86_64 on an x86_64c login: youmenPassword: Last login: Fri Jun 12 22:32:04 from centos-b[root@C ~]$# 如何需要删除这个连接使用killall ssh即可killall ssh # 删除搭建的桥telnet 127.0.0.1 10000Trying 127.0.0.1...telnet: connect to address 127.0.0.1: Connection refused

远程转发机制
远程转发

# -R sshserverport:remotehost:remotehostportsshserver# 举例ssh–R 9527:telnetsrv:23 –N sshsrv# 让sshsrv侦听9527端口的访问,如有访问,就加密后通过ssh服务转发请求到本机ssh客户端,再由本机解密后转发到telnetsrv:23Data < > sshsrv:9527 < > sshsrv:22 < > localhost:XXXXX < > localhost:YYYYY< >telnetsrv:23# 需求:# 在A(Centos7)上开启smtp服务(postfix),B(Centos6)做跳板,C(Centos6-1)客户端给Centos7发送邮件# 流程解释C-x->A (拒绝访问)C-B->A (通过远程代理,接受访问)

环境依然是上面三台机器,只是C服务器换成116.196.83.113 (JD)这台服务器

[root@A ~]# vim /etc/postfix/main.cf # inet_interfaces = localhost # 注释此行,不让接口直接绑定在127.0.0.1上[root@A ~]# systemctl restart postfix[root@A ~]# ss -tnl |grep 25ListEN 0 100 *:25 *:* ListEN 0 100 :::25 :::* [root@A ~]# yum -y install telnet-server[root@A ~]# systemctl start telnet.socket# 如果B上面有一些影响的防火墙规则就将它删掉[root@B ~]# iptables -nL --line-number[root@B ~]# iptables -D input 1# 测试下C能不能telnet 25端口连接A[root@C ~]# 39.108.140.0 25Trying 39.108.140.0...Connected to 39.108.140.0.Escape character is '^]'.220 Nginx_test.localdomain ESMTP Postfix# 设置防火墙策略,使A不接受C的一切请求[root@A ~]# iptables -A input -s 39.108.140.0 -j REJECT[root@C ~]# telnet 39.108.140.0 25Trying 39.108.140.0...telnet: connect to address 39.108.140.0: Connection refused# 使用B远程转发,发送邮件到[root@B ~]# ssh-copy-ID root@116.196.83.113:# 使用B远程转发,发送邮件到A,最好免密,否则需要手动口令验证[root@B ~]# ssh -R 50000:39.108.140.0:25 -fN 121.36.43.223# 此时可以到C跳板机看到已经有端口在监听了[root@C ~]# ss -tnl |grep 50000ListEN 0 128 127.0.0.1:50000 *:* [root@C ~]# telnet 127.0.0.1 5000Trying 127.0.0.1...telnet: connect to address 127.0.0.1: Connection refused[root@zabbix ~]# telnet 127.0.0.1 50000Trying 127.0.0.1...Connected to 127.0.0.1.Escape character is '^]'.220 Nginx_test.localdomain ESMTP Postfixmail from:youmen@163.com 250 2.1.0 Ok

配置步骤
下载地址
@H_900_502@openssh升级

# 记录sshd.pID路径find / -name sshd.pID# 查看openssh现有版本ssh -V# 使用rpm删除现有的opensshrpm -e --nodeps $(rpm -qa | grep openssh)# 删除旧的配置文件rm -rf /etc/ssh/*# 安装openssl-develyum -y install openssl-devel# 下载tar.gz包,配置编译,安装wget http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.0p1.tar.gz# 编译并安装tar xvf openssh-8.0p1.tar.gz cd openssh-8.0p1./configure --prefix=/usr/ --sysconfdir=/etc/ssh/ --with-ssl-dir=/etc/ssl --with-md5-passwords --mandir=/usr/share/man/make && make install# 设置ssh服务开机自启动# 复制启动文件至/etc/init.d/cp -a contrib/redhat/sshd.init /etc/init.d/sshd # 编辑/etc/init.d/sshd文件,将PID_file改为之前记下的sshd.pID路径 sed -i "s/PID_file=\/var\/run\/sshd.pID/PID_file=\/run\/sshd.pID/" /etc/init.d/sshd # 设置开机启动sshd chkconfig sshd on chkconfig --List sshd # 编辑/etc/ssh/sshd_config,设置一些常用参数sed -i "s/#PermitRootLogin prohibit-password/PermitRootLogin yes/" /etc/ssh/sshd_configsed -i "s/#PubkeyAuthentication yes/PubkeyAuthentication yes/" /etc/ssh/sshd_configsed -i "s/#PasswordAuthentication yes/PasswordAuthentication yes/" /etc/ssh/sshd_configsed -i "s/#AllowTcpForwarding yes/AllowTcpForwarding yes/" /etc/ssh/sshd_configsed -i "s/#X11Forwarding no/X11Forwarding yes/" /etc/ssh/sshd_configsed -i "s/#PIDfile \/var\/run\/sshd.pID/PIDfile \/run\/sshd.pID/" /etc/ssh/sshd_config# 加入系统服务cat > /usr/lib/systemd/system/sshd.service << EOF[Unit]Description=OpenSSH server daemondocumentation=man:sshd(8) man:sshd_config(5)#After=network.target sshd-keygen.service#Wants=sshd-keygen.serviceAfter=network.target[Service]ExecStart=/usr/sbin/sshd[Install]WantedBy=multi-user.targetEOF# 启用sshd服务systemctl enable sshd# 重启服务systemctl restart sshd# 查看服务状态systemctl status sshd# 验证ssh -VOpenSSH_8.0p1,OpenSSL 1.0.2k-fips 26 Jan 2017

http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/

具体升级步骤
到/etc/motd里面编写内容,看个人爱好
SSH设置登录欢迎信息

[root@Nginx_test ~]# cat /etc/motd   /\/\  (_人|人_)   /‥\  ミ(_Y_)ミ   > <  (/ \)  _(   )_ (_>―<_)# 关闭当前会话再登录  /\/\  (_人|人_)   /‥\  ミ(_Y_)ミ   > <  (/ \)  _(   )_ (_>―<_)[root@Nginx_test ~]#

┴┬┴┬/ ̄\_/ ̄\   ┬┴┬┴▏  ▏▔▔▔▔\   ┴┬┴/\ /      ﹨   ┬┴∕       /   )   ┴┬▏        ●  ▏   ┬┴▏           ▔█    ┴◢██◣     \___/   ┬█████◣       /     ┴█████████████◣   ◢██████████████▆▄   █◤◢██◣◥█████████◤\   ◥◢████ ████████◤   \   ┴█████ ██████◤      ﹨   ┬│   │█████◤        ▏   ┴│   │              ▏   ┬ ∕    ∕    /▔▔▔\     ∕   ┴/___/﹨   ∕     ﹨  /\   ┬┴┬┴┬┴\    \      ﹨/   ﹨   ┴┬┴┬┴┬┴ \___\     ﹨/▔\﹨ ▔\   ▲△▲▲╓╥╥╥╥╥╥╥╥\   ∕  /▔﹨/▔﹨      **╠╬╬╬╬╬╬╬╬*﹨  /  //
小熊图案
          总结       

以上是内存溢出为你收集整理的SSH原理常见应用升级及端口转发全部内容,希望文章能够帮你解决SSH原理常见应用升级及端口转发所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

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

原文地址: http://outofmemory.cn/yw/1015728.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存