实现机器远程跳转的两种自动化方式

现在实验室大部分的服务器是不允许直接ssh连接的,需要先连到一个跳转机,之后再通过这个跳转机去ssh连接服务器。如果是自动化连接,如下图所示:



手工操作的话无非就是两次输入ssh连接命令,如果是脚本自动连接的话该怎么做呢,本节针对shell脚本与python脚本两种自动化方式实现ssh远程跳转。

shell脚本:

ssh -i id_rsa -F bastion_ssh_config fsp@172.28.55.64
其中id_rsa为ssh连接的私钥文件(需要提前在目标主机与跳转机上置入公钥)。bastion_ssh_config为跳转配置文件,内容样例如下:

ControlPersist 15m
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
#172.28.55.64为目标主机的IP,192.168.35.97为跳转机的IP
Host 172.28.55.64
    ProxyCommand ssh -i id_rsa test@192.168.35.97 -W %h:%p -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null

python脚本:

python ssh_jumphost_connect.py
其中ssh_jumphost_connect.py文件的内容样例如下:

import paramiko
from sshtunnel import SSHTunnelForwarder
#192.168.35.97为跳转机的IP,172.28.55.64为目标主机的IP,
with SSHTunnelForwarder(('192.168.35.97', 22), ssh_username='test', ssh_password='Test@1234', remote_bind_address=('172.28.55.64', 22), local_bind_address=('0.0.0.0', 10022)) as server:
    client = paramiko.SSHClient()
    client.load_system_host_keys()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    client.connect(hostname='127.0.0.1', port=10022, username='test', password='Test@1234')
    stdin, stdout, stderr = client.exec_command('ls')
    print stdout.read()
    client.close()

参考链接:
https://selivan.github.io/2018/01/29/ansible-ssh-bastion-host.html
https://pypi.org/project/sshtunnel/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,819评论 0 10
  • 1)安装2)常用模块3)inventory4)playbook(role\tag\template)5) yaml...
    秦记阅读 4,275评论 2 5
  • 第 2 章 SHELL 基础知识2.1 shell脚本我们在上面简单介绍了一下什么是shell脚本,现在我们来进一...
    LiWei_9e4b阅读 1,592评论 0 0
  • feisky云计算、虚拟化与Linux技术笔记posts - 1014, comments - 298, trac...
    不排版阅读 3,922评论 0 5
  • 在我有限的生命里,对于人生的认识一直都比较浅薄。在经历一些情感后,渐渐悟出一个道理:人生是一场赤裸裸的交易。这个道...
    芹菜呢阅读 1,697评论 0 0