如何直接通过跳板机ssh到服务器

如何直接通过跳板机ssh到服务器,第1张

公司连远程游戏服需要先ssh登跳板机再跳板机ssh远程能直连:
自系统(Mac OS) ===> 跳板机 ===>远程服务器
1 跳板机远程服务器Linux远程服务器python 25(太旧)
都ssh、scp远程服务器能用ssh、scp连跳板机跳板机能用sshscp连自
系统说能向能反向
2 自系统perl 51、python 275、ssh、scp等各种UNIX必备
3 跳板机能用命令能访问目录自home目录
4 远程服务器运维监控着能乱搞乱监听端口服务

 除了SSH端口转发外,另一个办法就是SSH反向隧道。SSH反向隧道这个概念其实很简单。为此,你需要在限制性家用网络外面有另一个主机,即所谓的“中继主机”(relay host),你可以从所在地方通过SSH连接到该主机。你可以使用带公共IP地址的虚拟专用服务器(VPS)实例来建立中继主机。然后要做的就是建立一条持久性SSH隧道,从你家用网络的服务器通向公共中继主机。有了这条隧道,你就可以从中继主机“连回”到家用服务器(这就是为什么它叫“反向”隧道)。无论你人在什么地方,或者你家用网络中的NAT或防火墙限制多严格,只要你可以连接到中继主机,就可以连接到家用服务器。\x0d\在Linux上建立SSH反向隧道\x0d\不妨看看我们如何可以建立并使用一条SSH反向隧道。我们假设下列设置。我们将建立一条从家用服务器(homeserver)到中继服务器(relayserver)的SSH反向隧道,那样我们就可以从另一台名为clientcomputer的计算机,通过中继服务器以SSH的方式连接到家用服务器。中继服务器的公共IP地址是1111。\x0d\在家用服务器上,打开通向中继服务器的SSH连接,如下所示。\x0d\homeserver~$ ssh -fN -R 10022:localhost:22 relayserver_user@1111\x0d\这里的端口10022是你可以选择的任何随意的端口号。只要确保该端口没有被中继服务器上的其他程序所使用就行。\x0d\“-R 10022:localhost:22”选项定义了反向隧道。它通过中继服务器的端口1022,将流量转发到家用服务器的端口22。\x0d\若使用“-fN”选项,一旦你成功验证了身份、登录到SSH服务器,SSH就会径直进入后台。如果你不想在远程SSH服务器上执行任何命令,只想转发端口,就像在本文的示例中,这个选项很有用。\x0d\运行上述命令后,你将直接回到家用服务器的命令提示符。\x0d\登录进入到中继服务器,核实127001:10022绑定到sshd。如果是这样,那意味着反向隧道已正确建立起来。\x0d\relayserver~$ sudo netstat -nap | grep 10022\x0d\tcp 0 0 127001:10022 0000: LISTEN 8493/sshd\x0d\现在可以从其他任何计算机(比如clientcomputer),登录进入到中继服务器。然后访问家用服务器,如下所示。\x0d\relayserver~$ ssh -p 10022 homeserver_user@localhost\x0d\需要注意的一个地方就是,你为localhost输入的SSH登录信息/密码应该适用于家用服务器,而不是适用于中继服务器,因为你是通过隧道的本地端点登录进入到家用服务器。所以别为中继服务器输入登录信息/密码。成功登录后,你就接入到了家用服务器。\x0d\通过SSH反向隧道,直接连接到NAT后面的服务器\x0d\虽然上述方法让你可以连接到NAT后面的家用服务器,但是你需要登录两次,先登录到中继服务器,然后登录到家用服务器。这是由于中继服务器上SSH隧道的端点绑定到回送地址(127001)。\x0d\但实际上,只要单次登录到中继服务器,就可以直接连接到NAT后面的家用服务器。为此,你需要让中继服务器上的sshd不仅可以从回送地址转发端口,还可以从外部主机转发端口。这可以通过在中继服务器上运行的sshd里面指定GatewayPorts选项来实现。\x0d\打开中继服务器的/etc/ssh/sshd_conf,添加下面这一行。\x0d\relayserver~$ vi /etc/ssh/sshd_conf\x0d\GatewayPorts clientspecified\x0d\重启sshd。\x0d\基于Debian的系统:\x0d\relayserver~$ sudo /etc/initd/ssh restart\x0d\基于红帽的系统:\x0d\relayserver~$ sudo systemctl restart sshd\x0d\现在不妨从家用服务器开始建立SSH反向隧道,如下所示。\x0d\homeserver~$ ssh -fN -R 1111:10022:localhost:22 relayserver_user@1111\x0d\登录进入到中继服务器,用netstat命令核实SSH反向隧道已成功建立起来。\x0d\relayserver~$ sudo netstat -nap | grep 10022\x0d\tcp 0 0 1111:10022 0000: LISTEN 1538/sshd: dev\x0d\不像之前的情况,隧道的端点现在是1111:10022(中继服务器的公共IP地址),而不是127001:10022。这意味着,可以从外部主机连接到隧道端点。\x0d\现在可以从其他任何计算机(比如clientcomputer),输入下列命令,访问NAT后面的家用服务器。\x0d\clientcomputer~$ ssh -p 10022 homeserver_user@1111\x0d\在上述命令中,虽然1111是中继服务器的公共IP地址,但homeserver_user必须是与家用服务器关联的用户帐户。这是由于,你实际登录进入的主机是家用服务器,而不是中继服务器。后者只是将你的SSH流量中继转发到家用服务器而已。\x0d\在Linux上建立持久性SSH反向隧道\x0d\想必你已明白了如何建立一条SSH反向隧道,现在不妨让隧道具有“持久性”,那样隧道随时建立并运行起来(无论面对什么样的情况:暂时网络拥塞、SSH超时还是中继主机重启等)。毕竟,要是隧道没有始终建立起来,你也就无法可靠地连接到家用服务器。\x0d\为了建立持久性隧道,我要使用一款名为autossh的工具。顾名思义,万一SSH会话由于任何原因而断开,这个程序让你可以自动重启SSH会话。所以,让SSH反向隧道保持持久连接很有用。\x0d\第一步,不妨建立无需密码的SSH登录机制,从家用服务器登录到中继服务器。那样一来,autossh就能重启断开的SSH反向隧道,不需要用户干预。\x0d\下一步,将autossh安装到发起隧道的家用服务器上。\x0d\从家用服务器运行带下列变量的autossh,从而建立一条通向中继服务器的持久性SSH隧道。\x0d\homeserver~$ autossh -M 10900 -fN -o "PubkeyAuthentication=yes" -o "StrictHostKeyChecking=false" -o "PasswordAuthentication=no" -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -R 1111:10022:localhost:22 relayserver_user@1111\x0d\“-M 10900”选项指定了中继服务器上的一个监控端口,将用来交换测试数据,以监控SSH会话。该端口不应该被中继服务器上的任何程序所使用。\x0d\“-fN”选项传递给ssh命令,让SSH隧道可以在后台运行。\x0d\“-o XXXX”选项指令ssh执行下列 *** 作:\x0d\•使用密钥验证,而不是密码验证。\x0d\•自动接受(未知的)SSH主机密钥。\x0d\•每60秒就交换持久连接(keep-alive)消息。\x0d\•最多发送3个持久连接消息,而不接受任何响应。\x0d\与SSH反向隧道有关的其余选项仍与之前一样。\x0d\如果你希望SSH隧道一启动就自动建立起来,可以在/etc/rclocal中添加上述的autossh命令。

本文最初发表于 我的个人站点

更详细的解释可以参考 SSH百度百科

简单来理解,就是我拥有一台服务器,我现在想要登录上去做一些事情,那就得使用ssh登录到远程的服务器上,才能在上面进行 *** 作。

一开始在远程服务器上面,需要查看一下他的sshd服务启动了没有,如果没有启动,任何客户端主机是连接不上来的,一般如果是自己在云厂商处购买了主机,主机启动的时候就会把sshd服务启动起来。但有可能自己在测试环境搭建机器的时候,是没有默认启动的,这时候就需要在测试机器的终端看一下,命令如下

如果没有启动的话,那就启动一下,命令如下

这里我在测试环境机器的ip是 1921680187, 我在自己的电脑上想要登录这台机器,我要做的就是使用ssh命令去登录1921680187这台主机

我需要告诉1921680187这台主机我以谁的身份去登录, 1921680187会询问密码,命令如下

敲入正确的密码之后,我们就已经成功登录了主机了

这里看到让我输入一个文件名字来保存密匙,我这里示例就输入一个"foxchao"

回车以后,询问是否要输入一个密码来保护这个密匙,为了方便起见,我就不输入了,不然每次使用这个密匙文件还要输一遍密码,直接一路回车就ok,如下所示

到了这里,可以看到我们已经创建好了密匙对

现在我们新建了自己的密匙对之后,把foxchaopub这个文件放到目标的机器上,加入目标机器的 authorized_keys 中就可以了,以后登录的时候就可以免去输入密码的步骤。
那我们先用scp放上去 ,关于scp命令,这里不过多介绍,就是传文件的一个命令,使用也比较简单,具体想了解可以看这里 Linux scp命令

这里表示我要把foxchaopub这个文件拷贝到1921680187这台机器root用户的用户目录下

回车之后会询问密码,输入密码确认之后,文件就传上去了,如下

这时候我们先用密码登上去看看传上去没有

可以看到foxchaopub这个文件已经传上来了

目标主机上如果没有ssh文件夹,就自己创建一个,创建好之后,再创建一个authorized_keys文件。如果有的话就不用了。

把刚才的foxchaopub这个文件内容写进authorized_keys

看一下,已经有内容了

这里需要注意
authorized_keys 文件对权限有哟求,必须是600(-rw——-)或者644
ssh目录 必须是700(drwx——),否则一会儿登录不成功
弄完之后检查一下权限,如果不是的话,改成响应的权限就ok了

在登录之前,要确认一下目标主机是否允许密匙对登录,一般都是打开的,如果没有打开就自己打开
(查看 /etc/ssh/sshd_config 文件内容 中的 PubkeyAuthentication 这一项是否为 yes,如果不是就自己修改成yes之后重启sshd服务 )

为了避免繁琐的每次都敲一长串 user@host 这样的命令, 可以自己在ssh 目录下建一个config文件,文件内容如下,想要多了解一下配置参数使用的,可以看 linux ssh_config和sshd_config配置文件

文件建立好之后,直接使用自己定义的别名登录,非常方便快捷

如果是自己局域网搭建的机器,倒不用在意服务器的安全问题,但如果是暴露在公网上的机器,可以通过公网ip登录的,一定要注意自己服务器的安全问题,最起码不能开放默认端口,以及密码登录

在服务器上查看一下登录的日志,可以看到很多想要尝试登陆机器的人,所以公网上面的机器一定要做好自我保护

这里只列出一小部分的日志

统计一下,可以看到有29190次登录失败的记录

我们改掉默认的端口,以及禁用密码登录,只支持密匙对登录,这样一来,提高了服务器本身的安全性,至少没那么容易被别人登录上来为所欲为。

在服务器上修改sshd的配置文件

保存之后,重启sshd服务

使用自己定义的端口登录

1 ssh简介以及本例的应用场景
① ssh的简介
SSH是一个用来替代TELNET、FTP以及R命令的工具包,主要是想解决口令在网上明文传输的问题。为了系统安全和用户自身的权益,推广SSH是必要的。 SSH是英文Secure Shell的简写形式。通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。
② 本例的应用场景
用户在client(Linux)上通过ssh远程执行server(Windows)上的命令,比如c:\testbat
注:Linux版自带ssh Server且默认启动,具体设置方法请参见google。

2 ssh服务器的安装(Windows)
ssh服务器软件有许多中,我们这里使用的是免费的freeSSHd。
① 首先从官方站点下载软件并安装(>不用将问题想的那么复杂
只要 客户端 到 A 是通的,A 到 B 是通的, 那么 客户端 -> A -> B 就是通的,
不管是公网还是内网,没区别的。
只需要连上A服务器后, 在A服务器 SSH访问 B服务器就行了


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

原文地址: http://outofmemory.cn/zz/13486773.html

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

发表评论

登录后才能评论

评论列表(0条)

保存