我的公司在公司防火墙后面有一个 linux 服务器(CentOS 6 VM),我对 VM 有完全的根控制权,但我无法控制防火墙。有一个 ssh 服务器在它上面运行,我可以在公司网络内通过 ssh 连接到它。
当我在公司网络之外时,我想通过 ssh 连接到这个虚拟机。我如何实现这一目标?
这个linux VM运行在Mac主机上,我可以使用logmein连接,然后访问linux VM。我想直接通过 ssh 连接到 linux VM。
我猜必须有某种由 linux VM 启动到外部机器的握手才能工作?
我正在尝试使用 SSH 服务器作为连接多个内部服务器的网关。在这种情况下,内部意味着它们不能直接访问,它们没有分配给它们的公共 IP。
所以场景应该是这样的(例如有 2 个服务器,可能更多),网关公共 IP 123.456.789.45 内部为 10.12.40.13
+--------+ +---------+ +----------+
| client |--> 2214/tcp --> | | --> 22/tcp --> | Server 1 |
+--------+ | | +----------+
| Gateway |
+--------+ | | +----------+
| client |--> 2215/tcp --> | | --> 22/tcp --> | Server 2 |
+--------+ +---------+ +----------+
Run Code Online (Sandbox Code Playgroud)
我的第一种方法是将它们从网关设置到服务器,类似于
ssh -N -L 123.456.789.45:2214:127.0.0.1:22 tunnel-user@server1
ssh -N -L 123.456.789.45:2215:127.0.0.1:22 tunnel-user@server2
Run Code Online (Sandbox Code Playgroud)
虽然这可行,但我偶然发现了隧道不太可靠的问题,到处都失败了。合乎逻辑的下一步是尝试autossh运行。在这里我遇到了很多问题。可以毫无问题地建立第一个隧道
autossh -M 20000 -f -N -L …Run Code Online (Sandbox Code Playgroud) 我想使用 virt-manager 来管理我在远程主机上运行的 libvirt/kvm 虚拟机,但是我用来通过 ssh 连接到该主机的方法有点复杂。我需要使用自定义端口以及多跳的代理转发。例如,要通过 ssh 进入该 KVM 框,我使用默认标识证书并执行以下命令:
ssh -At -p 4188 www.example.com ssh -At -p 8854 virt-host.internals.int
Virtmanager 远程连接的对话框似乎相当原始,我想知道是否有解决方法?
virtualization ssh ssh-tunnel virt-manager kvm-virtualization
我必须创建 SSH 隧道来将部署服务器连接到 VPN:
DeploymentServer --> Gateway --> PrivateServer
每台机器都使用一个密钥,我尝试了以下命令:
myMachine $ ssh -i GATEWAY_KEY.pem -N -L 1122:ubuntu@SERVER_PRIVATE_IP:22 ubuntu@GATEWAY_IP
然后在另一个终端窗口中:
myMachine $ ssh -i PRIVATE_SERVER_KEY.pem -p 1122 ubuntu@SERVER_PRIVATE_IP
但它不起作用,我收到超时错误。我的端口 1122 已打开,我可以通过 SSH 进行连接。我不知道我做错了什么,我的语法正确吗?
这是我的第一个隧道,所以不要笑我!
编辑1
我添加-v并修复了第二个 SSH 调用。
第一次调用:
myMachine $ ssh -i GATEWAY_KEY.pem -N -L 1122:ubuntu@SERVER_PRIVATE_IP:22 ubuntu@GATEWAY_IP -v
响应:debug1: Authentication succeeded (publickey).
第二次通话:
myMachine $ ssh -i PRIVATE_SERVER_KEY.pem -p 1122 ubuntu@localhost -v
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: …Run Code Online (Sandbox Code Playgroud) 我有一个带有两个网络接口的服务器。Cassandra 正在侦听 eth1 上的专用内部数据库网络(无法从外部访问)。所以我做我的隧道是这样的:
ssh -f -N -L9161:192.XXX.XXX.200:9160 user@192.YYY.YYY.200 -P 9922
Run Code Online (Sandbox Code Playgroud)
其中 XXX 是内部数据库网络,YYY 是 ssh 正在侦听的网络。当我尝试时,cqlsh localhost 9161出现以下异常:
Connection error: ('Unable to connect to any servers', {'localhost': ConnectionShutdown('Connection <AsyncoreConnection(139691023521360) localhost:9161 (closed)> is already closed',)})
Run Code Online (Sandbox Code Playgroud)
但是当我 telnet localhost 9161 时,我成功地获得了一个 telnet shell。当然,cassandra 正在运行。
任何想法如何让我的隧道工作?
我已经成功地在本地 linux 服务器上创建了一个到我们的云 postgresql 服务器的 SSH 隧道,使用以下命令:
ssh -N -f -L 5431:localhost:xxxx mycloudserver.com
Run Code Online (Sandbox Code Playgroud)
(其中 xxxx 是远程端口)
使用这个命令我可以通过端口 5431 访问远程 PostgreSQL 数据库,但只能在这个 linux 服务器上。
现在我想与网络上的其他PC“共享”此连接,以便我可以使用ODBC驱动程序连接到linux_server:5431并读取云数据库,而无需在客户端上安装任何SSH软件。使用 iptables 打开端口 5431 不起作用。
iptables -A INPUT -p tcp -s 0/0 --sport 1024:65535 -d 192.168.128.5 --dport 5431 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -s 192.168.128.5 --sport 5431 -d 0/0 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
已经试过了
ssh -N -f -L 5431:0.0.0.0:xxxx mycloudserver.com
Run Code Online (Sandbox Code Playgroud)
也。隧道已成功构建并在服务器上运行,但我无法“看到”来自客户端的连接。
我正在尝试通过网关连接到 EC2 实例。
如果我连接到网关
local> ssh gateway
Run Code Online (Sandbox Code Playgroud)
然后我可以在没有密码的情况下连接到 EC2
gateway> ssh ec2 # works
Run Code Online (Sandbox Code Playgroud)
但是,尝试通过代理连接似乎需要身份文件。
Host gateway
HostName <gateway>
Host ec2
HostName ec2-<ec2>.compute.amazonaws.com
ProxyCommand ssh gateway -W %h:%p
local> ssh ec2
Permission denied (publickey).
Run Code Online (Sandbox Code Playgroud)
我认为 ProxyCommand 基本上是将我登录到网关,然后登录到最终目的地。如果是这样,当网关设置为不需要公钥时,为什么它会要求我提供公钥?如何以与 ssh 进入网关然后 ssh 进入 ec2 相同的方式连接到 ec2 实例?
编辑:rsync 正常工作(不要求提供密钥文件)
rsync -pthrvz --rsync-path=/usr/bin/rsync --rsh='ssh gateway ssh' . ec2:/path
Run Code Online (Sandbox Code Playgroud)
ssh -v 输出 gateway> ssh ec2
gateway> ssh -v ec2
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for …Run Code Online (Sandbox Code Playgroud) 我正在尝试设置从我的 AMAZON 实例到我的本地计算机(开发)的远程转发 我的问题是,当我连接到 amazon 服务器并且运行 netstat -antp 命令时,它显示我有一个套接字正在侦听127.0.0.1:8080 仅限但我希望它侦听公共接口。
我的“netstat -antp | grep LISTEN”的输出:
[centos@ip-##-##-##-## ~]$ netstat -ant
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN -
Run Code Online (Sandbox Code Playgroud)
我尝试使用 RemoteForward 选项:
[PUBLIC_IP]:8080
[AMAZON_INTERNAL_IP]:8080
0.0.0.0:8080
Run Code Online (Sandbox Code Playgroud)
这是我的 .ssh/config 文件的内容:
Host amazon
User centos
HostName ###.###.###.###
RemoteForward 8080 127.0.0.1:81
IdentityFile ~/.key.pem
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助 !
我有一台位于防火墙(公司防火墙)后面的服务器正在工作,因此只能通过端口 22 (SSH) 访问它。我可以毫无问题地使用腻子连接到服务器。
此外,该服务器像往常一样在端口 80 上运行和侦听 Apache。
但是我无法使用浏览器连接到该网站,因为公司的防火墙阻止了端口 80(以及其他所有人)。
有没有办法让我的浏览器连接到该服务器中的 Apache,以便我可以浏览我正在处理的站点?
谢谢。
编辑:
由于我使用普通的 SSH 隧道技术没有成功,我认为这个问题与所有试图通过防火墙的问题不同(因此我在这里问)。
但我错了,这是完全相同的情况,普通的 ssh-tunnel 可以解决问题。
然而,使这个问题有点不同(以及我不成功的原因)是远程服务器也在 NAT 后面,所以服务器的真实 IP 是私有 IP,而不是我用来启动 SSH 的公共 IP会议。
我意识到我在浏览器的地址栏中输入了服务器的私有 IP,瞧!它就像一个魅力。
我想阻止人们绕过 Opendns 和鱿鱼代理块使用 ssh 隧道访问他们的 pc 主页。我知道我可以解决这个问题与老板交谈,但我也想更好地了解技术上是如何可能的。
ssh-tunnel ×10
ssh ×6
linux ×2
proxy ×2
blocking ×1
cassandra ×1
database ×1
firewall ×1
odbc ×1
postgresql ×1
ssh-keys ×1
tunneling ×1
virt-manager ×1