当前位置: 首页 > 知识库问答 >
问题:

通过ssh-隧道从本地计算机连接到远程服务器

督嘉言
2023-03-14

我正在我的机器上运行Ansible。我的机器没有ssh访问远程机器的权限。来自本地计算机的端口22连接被学院防火墙阻止。但是我可以访问一台机器(ssh隧道),通过它我可以登录到远程机器。现在有一种方法可以在远程主机上从本地机器运行ansible playbook。

在某种程度上,可以通过ssh隧道将Ansible/ssh连接到远程机器。但并不完全登录到ssh隧道。连接将通过隧道。

另一种方法是我可以在ssh-隧道上安装anable,但这不是想要的,并从那里运行播放。但这不是一个理想的解决方案

如果可能的话,请告诉我。

共有3个答案

宫铭
2023-03-14

假设您可以从本地机器ssh到x.x.x.x,从x.x.x.xssh到y.y.y,而y.y.y是ansible playbook的目标。

库存:

[target]
y.y.y.y    

剧本。yml公司

---
- hosts: target
  tasks: ...

运行:

ansible-playbook --ssh-common-args="-o ProxyCommand='ssh -W %h:%p root@x.x.x.x'" -i inventory playbook.yml

孔寒
2023-03-14

无需在跳转服务器和远程服务器上安装ansible,ansible是ssh服务专用工具:-)

在本地机器(local\u A)上,您可以通过跳转框(jump\u C)登录到远程机器(Remote\u B)。

login server Local_A
ssh -f user@remote_B -L 2000:Jump_C:22 -N

其他选项包括:

  • -f告诉ssh在进行身份验证后进行后台处理,因此您不必坐在远程服务器上运行某些东西以使隧道保持活动状态。
  • -N表示您想要一个SSH连接,但实际上并不想要运行任何远程命令。如果您创建的只是一个隧道,那么包含此选项可以节省资源。
  • -L[bind_address:]port: host: host port指定本地(客户端)主机上的给定端口要转发到远程端的给定主机和端口。

除非您为无密码登录设置了DSA或RSA密钥,否则将出现密码挑战。

有很多文档教您如何使用ssh隧道。

ansible -vvvv remote_B -m shell -a 'hostname -f' --ssh-extra-args="-L 2000:Jump_C:22"

您应该看到remote_B主机名。让我知道结果。

熊博远
2023-03-14

有两种方法可以实现这一点,而无需在ssh隧道机器上安装Ansible。

解决方案#1:

在库存中使用以下变量:

[remote_machine]
remote ansible_ssh_host=127.0.0.1 ansible_ssh_port=2222 ansible_ssh_user='username' ansible_ssh_private_key_file='/home/user/private_key'

希望您理解以上参数,如果需要帮助,请在评论中询问

解决方案#2:

创建。ssh/config文件并添加以下参数:

####### Access to the Private Server through ssh-tunnel/bastion ########

Host ssh-tunnel-server
    HostName x.x.x.x
    StrictHostKeyChecking no
    User username
    ForwardAgent yes

Host private-server
  HostName y.y.y.y
  StrictHostKeyChecking no
  User username
  ProxyCommand ssh -q ssh-tunnel-server nc -q0 %h %p

希望能帮到你,如果你需要帮助,尽管问

 类似资料:
  • 我想通过ssh隧道与具有localhost访问权限的用户连接到远程MySQL。 我用这个做隧道: 和这个连接到主机: 我得到的错误是: 问题是用户“user”@“remote-host”(或“user”@“%”)不存在,只有“user”@“localhost”存在。 有没有办法强迫远程主机在不进行服务器端修改的情况下认为我来自本地主机?这是我通过ssh隧道进行连接的唯一原因。 注: 如果要连接此命

  • 我正试图通过SSH隧道从本地JAVA程序连接到RDS数据库,并连接到EC2实例以进行调试。我试图通过SSH隧道进入EC2实例,然后将端口转发到RDS数据库。这是我的密码。 请帮忙! 编辑:looply_dev10月2, 2012 4:17日下午

  • 我希望使用jmx或JSTATD通过ssh隧道(到EC2机器)使用visualvm应用程序。我该怎么做?下面是已经尝试(和失败)的列表:(顺便说一句:如果visual vm不合适,如何在远程计算机上查找内存泄漏?) 我在EC2机器上设置了jstatd服务器(应用程序已经在上面运行),然后在VisualVM中设置了一个将本地端口3333映射到远程端口1099的隧道,我试图在端口3333上使用jstat

  • 我将Spring Data JPA与Hibernate一起作为持久化提供程序,并将远程MySQL5服务器用于定期复制内部数据子集的作业。该作业(即Quartz调度的java应用程序)每个dai运行一次,大约需要。30秒完成同步)。出于安全原因,我们不想打开远程服务器进行外部直接连接(即。本地主机以外)。 我已经看到了使用Jsch以编程方式设置ssh隧道的示例,但无法找到关于如何将Jsch与spri

  • 问题内容: 我已经在两个服务器 A 和 B 之间建立了SSH隧道。 B 有MySQL服务器,这可行: 虽然这不是: 尽管my.cnf具有以下几行: 现在关于隧道。它连接以下内容: 但是当(在 A上 ,端口转发)时,我会 我懂了 当我这样做 我懂了 可能是什么原因?我究竟做错了什么? 问题答案: 这里有三个问题。 1-暂时忘记SSH隧道 您不能将MySQL绑定到多个特定IP。第一个子句被第二个子句覆

  • 我有两台机器:machine foo()运行redis服务器,而machine bar()运行通过Jedis连接到foo的java应用程序。当给jedis提供地址时,一切都很好。 但是我不信任foo和bar之间的路由器,redis也不支持SSL。因此,我设置了一个从bar到foo:的ssh隧道 现在,从bar中,我可以直接在或通过隧道在成功地telnet到foo上的redis。对于jedis,如果