「Xshell」Xshell跳板机通过隧道连接远程服务器

「Xshell」Xshell跳板机通过隧道连接远程服务器,第1张

小菜运维仅仅只是一位菜鸟运维

废话不多说,小菜运维最近又完成了一套外包项目开发,现在准备将项目部署到甲方购买的阿里云服务器上。因为甲方是集团型大企业,又有自己的运维团队,很多规章制度比较规范,部署的时候要求通过跳板机/堡垒机登录阿里云内网ECS。虽然说跳板机很有必要也应该这样做,但奈何愿意这样做的客户是少之又少,这次是撞上大客户啦!

小菜运维平时都是使用的Xshell、Xftp管理服务器,这次通过跳板机登录内网ECS时不断输入密码,还不能直连内网ECS上传文件, *** 作了几次小菜运维就忍不住要口吐芬芳了,终于决定用Xshell的隧道来彻底解决一下这个效率低下、重复体力劳动的问题了!

Xshell的隧道转发类型共有三种,这里我们不展开介绍各自的应用场景,大家可以自行了解,我们这里选用的是Dynamic,可以实现自动连接内网ECS,也可直接连接FTP,但是前提是必须先连接跳板机建立起隧道,然后再连接内网ECS

隧道类型:

Local(Outgoing)

Dynamic(SOCKS4/5)

Remote(Incoming)

1 连接跳板机

11 建立到跳板机的会话

Xshell选择新建会话,点击左侧 连接 ,在 常规 栏依次填入会话名称、跳板机IP、跳板机端口,然后依次完成 用户身份验证 登录脚本 设置,这里需要强调的一点是,务必记得设置 登录脚本 以保证隧道的长连接,避免因隧道的断开而导致后续其他远程目标机器的连接失败,具体 *** 作如下图:

12 建立跳板机隧道

在上一步的对话框中,继续点击左侧 隧道 - 添加 ,在d出的转移规则对话框中完成规则设置,这里要强调的是 源主机 是指你当前建立隧道连接的本地机器,一般填入 localhost 127001 即可,而 目标主机 则是指你要远程连接的远程服务器,具体配置信息如下图:

2 建立远程主机连接

21 建立到远程主机的会话

Xshell选择新建会话,点击左侧 连接 ,在 常规 栏依次填入会话名称、本机/本地IP、本机/本地监听端口,然后依次完成 用户身份验证 设置,这里需要强调的一点是,务必记得这里设置的连接主机地址 12 中设置转移规则时填写的 源主机 地址,而不是远程服务器的IP地址,同样的,这里设置的端口号也是 12 中设置转移规则时填写的 侦听端口 ,但是 用户身份验证 需要填写远程服务器的用户信息。具体 *** 作如下图:

3 SSH/SFTP到远程服务器

自动连接远程服务器的前提是先连接到跳板机/堡垒机,然后再连接到远程服务器。

在Xshell中双击已建好的到堡垒机的会话,待成功完成登录后,再双击已建好的到远程服务器的会话,这时我们可以看到Xshell自动实现了登录远程服务器 *** 作,这时在Xshell已登录的远程服务器页面,点击顶部工具栏的 新建文件传输 按钮,Xshell将自动打开Xftp并自动登录远程服务器的Xftp文件管理页面;

1 连接跳板机

11 建立到跳板机的会话

这里和 Local(Outgoing)方式 的步骤完全相同,可参照之前步骤 *** 作。

12 建立跳板机隧道

这里和 Local(Outgoing)方式 的区别在于转移规则的配置,具体配置信息如下图:

2 建立远程主机连接

21 建立到远程主机的会话

这里和 Local(Outgoing)方式 的区别在于主机和端口号的配置,这里的主机和端口号都是配置的远程服务器的, 用户身份验证 同样还是需要填写远程服务器的用户信息。具体 *** 作如下图:

22 建立到远程主机会话的代理

在上一步 21 建立到远程主机的会话 的对话框左侧,点击 代理 ,然后浏览并添加代理服务器,这里我们代理服务器设置的就是本地机器,要注意的是这里 代理服务器的监听端口必须和12中隧道转移规则设置的侦听端口保持一致 ,具体配置如下图:

3 SSH/SFTP到远程服务器

这里和 Local(Outgoing)方式 的步骤完全相同,可参照之前步骤 *** 作。

基于隧道可以简化很多体力 *** 作,感觉起来就好像堡垒机不存在一样,实际 *** 作中推荐使用 Dynamic(SOCKS4/5)方式 ,因为Dynamic(SOCKS4/5)方式对于跳板机后有多台远程服务器需要连接的场景只需要配置一次隧道和代理,之后就可以直接添加到远程服务器的会话就可以了;而 Local(Outgoing)方式 则需要为每一台远程服务器添加一个单独的隧道才可以。

如果按照以上步骤 *** 作仍然不能正常访问,那么……建议你联系你的堡垒机管理员,可能是堡垒机帐号/凭据/权限等的设置没有给足你权限。

附-参考文档:

阿里云·堡垒机

阿里云·透明代理

本机:本地Windows客户端,Windows 7 *** 作系统;SecureCRT 72;具有Linux用户的公钥和私钥;IP地址为1000网段

跳板机 A机:新建mysql数据库服务器,CentOS 65 *** 作系统;具有Linux用户的公钥;IP地址有两个,一个是1000网段,一个是1921680网段IP;

目标机 B机:已有的mysql数据库服务器,CentOS 65 *** 作系统;具有Linux用户的公钥;IP地址为1921680网段IP;

现在的需求是,要将B机上的MySQL数据库进行备份,将备份文件传输到A机上进行数据库恢复,在A即上运行MySQL数据库;

网络方面,本地Windows客户端,可以连接到A机,不能连接到B机;A机和B机之间可以相互访问;

此时需要面对的问题是:由于客户端不能直接连接B机,就无法进行 *** 作,原数据库的备份和文件传输就无法进行。

解决思路:

使用 SecureCRT 72工具,从本地Windows服务器上先连接到A机上,然后以A机为跳板机,在A上发起ssh命令连接B机,公私钥校验使用本地Windows服务器上的公私钥;从A机ssh到B机上,先发起mysql备份任务,然后将备份打包;在回到A机上,发起scp命令,将压缩后的备份文件从B机传送会A机这样就解决了两个难题,可以在A机上进行MySQL数据库的恢复和启动了。

关于跳板机/堡垒机的介绍:

跳板机可以使开发或运维人员在维护过程中首先要统一登录到这台服务器,然后再登录到目标设备进行维护和 *** 作

跳板机使用场景

查看状态

访问测试

登入web界面,初始密码账号均为admin

登录jumpserver服务web端进行虚拟机管理 *** 作

1)登录admin管理界面

创建一个develop组

3)创建一个用户curry,将curry添加到develop组里面,角色为普通用户,然后提交

4)点击更新,给curry用户添加登录密码

填写curry用户密码然后提交

5)用curry账号登录

进入curry用户界面

6)创建一个管理用户(用来管理资产虚拟主机,此用户必须要有资产虚拟主机的root身份,其中的密码为ssh登录虚拟主机的密码)

7)创建资产(指的是被管理的虚拟主机)

填入虚拟主机名、ip地址及管理用户

点击主机名,进入资产详情页面

点击测试,检测被管理的虚拟主机是否能ping通,如下结果表明测试成功

8)创建一个过滤器

9)创建一个系统用户(此用户名在登录虚拟主机后会被自动创建,为虚拟主机登录的默认普通用户,非管理员用户,权限比较小)

10)创建授权规则,将资产添加到develop组中,是的此组中的用户可以访问此资产虚拟主机

11)登录curry用户界面,点击web终端

可以看到被授权的终端虚拟机,点击虚拟终端即可在命令窗口 *** 作终端

12)再设置过滤器

点击规则

设置命令过滤禁止规则

13)此时再一次登录curry页面登录虚拟主机时,执行这些命令将会被禁止,如下所示

14)回到admin的web端,在会话管理下的历史会话可以打开录像回放列表,记录虚拟主机的所有 *** 作过程的录像

15)录像回放

16)再创建一个资产

17)在资产授权中将此资产也添加到develop组中

18)登录curry界面并打开web终端可以看到 *** 作两台虚拟主机

当然,OS X上的终端可以使用iterm2,这样配置后便利性不比$99的secureCRT差

首先介绍下不通过跳板机进行登录的方式,准备:

1 写一个expect脚本

#!/usr/bin/expect

set timeout 30

spawn ssh [lindex $argv 0]@[lindex $argv 1]

expect {

"(yes/no)"

{send "yes\n";exp_continue}

"password:"

{send "[lindex $argv 2]\n"}

}

interact

该脚本比较简单,需要三个参数,第一个参数是远程用户名,第二个参数是远程地址,第三个参数是密码

2 将expect脚本copy到$PATH下(例如/usr/local/bin)

3 在iterm2中设置登录命令为1中的脚本,用command+o的方式呼出profiles,点击Edit Profiles

上面是已配置的远程登录机列表,双击可以自动登录

如上图配好后,即可自动登录

下面再说下有跳板机的情况

俺公司的跳板机策略如下,不同公司的环境不一样,也许某些同学可以进行参考

1跳板机上不能存放任何文件,/tmp下可以方临时文件,每天会定时清掉

2copy文件方向只能是local->跳板机->remote的方向,即local可以push/pull跳板机上的文件,跳板机可以push/pull远程上的文件

3向跳板机登录前需要通过邮件/短信的方式获取passcode,这是除密码之外的额外的验证方式

其实跳板机的自动远程登录与非跳板机的差异在expect脚本的编写上,其他的照搬即可,那这里就直接把代码贴出来就行了

#!/usr/bin/expect

# 参数1:远程host;参数2:远程password

if { $argc != 2 } {

send_user "Usage: host password\n"

exit

}

set host [lindex $argv 0]

set pw [lindex $argv 1]

set TERMSERV yourjumpserver # 跳板机服务器

set USER jumpserveruser # 用户名

set PASSWORD jumperserverpasswd # 跳板机密码

set fd [open /place/to/passcode r] # 本地存放passcode的地方

gets $fd pc

close $fd

# Start the session

catch {spawn ssh -l $USER $TERMSERV} # 登录跳板机

# Login

expect "assword:" { send "$PASSWORD\r" }

expect "passcode:" { send "$pc\r" }

#通过跳板机登录线上机器

expect "hostname" { send "ssh -l $USER $host\r" } # hostname为你跳板机的名字

expect {

"(yes/no)"

{send "yes\n";exp_continue}

"assword:"

{send "$pw\n"}

}

expect "$host" { send "cd ~\r"; interact }

跳板机(Jump Server),也称堡垒机,是一类可作为跳板批量 *** 作远程设备的网络设备,是系统管理员或运维人员常用的 *** 作平台之一。跳板机最核心的功能是以本机作为跳板来 *** 作远程设备,较为普遍地是通过ssh协议实现远程管理。这时可以通过登录到跳板机,通过内网ip跳转登录到服务器上。

背景:

暴露私网的一台机器,公网可访问。由于坑爹的电信没有给固定的公网IP,所以没法在路由器上配置公网转发。

网上google后,发现ssh的强大,一条命令搞定。

工作原理:

1、本地主机和远程主机建立连接;

2、远程主机上分配了一个 socket 侦听 port 端口;

3、远程端口上有了连接, 该连接就经过安全通道转向本机的端口。备注:root 登录远程主机才能转发特权端口。

在内网机器上执行上述命令后,netstat可以看见本机和远程机器已建立ssh的链接。

登录远程机器查看

此时在远程机器直接ssh本机的2222端口,就可以访问内网机器了。

似乎这里一切OK,但是我们需要的是一台跳板机。当换一台其他的ECS连接远程的机器后,发现链接拒绝。其实留心下就发现了,上面lsof查看的时候,监听的是localhost,其他机器当然无法访问了。可是我们的ssh参数中明明有-g选项,-g就是明确允许远程机器可以远程访问啊。

google后发现,运程机器的ssh还需要开启GatewayPorts yes

然后在内网机器重新执行上述命令,这里在远程机器上查看,监听的是公网IP,OK了。

现在可以在可访问远程机器的PC上,ssh 2222端口,从而访问内网的机器了。

以上就是关于「Xshell」Xshell跳板机通过隧道连接远程服务器全部的内容,包括:「Xshell」Xshell跳板机通过隧道连接远程服务器、secureCRT8.0创建隧道连接跳板机不能访问网站,但是xshell创建隧道连接跳板机就可以打开目标网站,求大神、容器(22)--Docker下jumpserver跳板机 /堡垒机详细部署等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/sjk/10135095.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存