我在我的机器上运行Ansible。我的机器没有ssh访问远程机器。来自本地计算机的端口22连接被学院防火墙阻止。但我可以访问一台机器(ssh-tunnel),通过它可以登录到远程机器。现在有一种方法可以从远程主机上的本地机器上运行ansible playbook。
在某种程度上,可以通过ssh-tunnel使Ansible / ssh连接到远程机器。但不完全登录ssh-tunnel。连接将通过隧道。
其他方式是我可以在ssh-tunnel上安装ansible,但这不是所希望的并且从那里开始运行。但这不是一个理想的解决方案。
如果可能,请告诉我。
答案 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服务的工具: - )
在本地计算机(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 -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