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

时间:2016-06-18 13:06:47

标签: ssh ansible

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

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

其他方式是我可以在ssh-tunnel上安装ansible,但这不是所希望的并且从那里开始运行。但这不是一个理想的解决方案。

如果可能,请告诉我。

3 个答案:

答案 0 :(得分:2)

如果没有在ssh-tunnel机器上安装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

希望能帮助您,如果您需要任何帮助,请随时提出

答案 1 :(得分:0)

没有请求在跳转和远程服务器上安装ansible,ansible是仅限ssh服务的工具: - )

首先确保您可以直接使用SSH隧道。

在本地计算机(Local_A)上,您可以通过跳转框(Remote_B)登录远程计算机(Jump_C)。

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

其他选项包括:

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

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

lots of documents教你如何做ssh隧道。

然后从Local_A

尝试下面的ansible命令
ansible -vvvv remote_B -m shell -a 'hostname -f' --ssh-extra-args="-L 2000:Jump_C:22"

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

答案 2 :(得分:0)

假设您可以从本地计算机上搜索x.x.x.x,然后从y.y.y.y ssh到x.x.x.x,而y.y.y.y是您的ansible剧本的目标。

清单:

[target]
y.y.y.y    

playbook.yml

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

执行命令

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