实现两台linux服务器互相传递ip

实现两台linux服务器互相传递ip

背景

实验室机器经常重启之后会变ip, 然后自己又不想固定ip,所以期望能够再机器重启后立马就能知道机器的ip

实现

#!/bin/bash
# 功能:两台服务器来回传递ip,防止一台机器重启后,ip不知道了
# 1. 设置remote_user/ip, 目标主机地址
# 2. 设置device,当前机器网卡名
# 3. 设置ssh免密登录 ,ssh-copy-id user@host
# 4. 加入crontab 定时启动
#    */1 * * * * /bin/bash /home/user/send_ip.sh

source /etc/profile
remote_user="xxx"
remote_ip="x.x.x.x"
user=$USER
device="eth0"
ip=`ifconfig "$device"|grep "inet addr:"|awk -F":" '{print $2}'|awk '{print $1}'`
filename="$user"@"$ip".txt
echo "$ip" > "$filename"
rsync -avu --progress  ./"$filename"  "$remote_user"@"$remote_ip":~/remote_ip/

crontab


SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""
*/1 * * * *  /bin/bash /home/ubuntu/send_ip.sh

python实现(optional)

"""python
#desc:用于两个服务器相互联通访问ip是否可用
#TODO: 未来可以做成master/slaver的形式,确保机器重启后ip保持不变
"""
from threading import Thread,Lock
from configparser import ConfigParser
import socket
import os
import time
import sys

config_file = "config.ini"
if not os.path.join(config_file):
    assert FileNotFoundError(config_file)
config = ConfigParser()
config.read(config_file)

lock = Lock()

def write_config_remote(ip,config_file):
    config.set("remote","ip",ip)
    with open(config_file,"w") as fp:
        config.write(fp)

class ConnectServer(object):
    def __init__(self,port=7776):
        self.server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
        print(config.getint("my","port"))
        self.server.bind(("0.0.0.0",config.getint("my","port")))
        self.recv_th = Thread(target=self.receive_data)
        self.send_th = Thread(target=self.send_data)

    def start(self):
        self.recv_th.start()
        self.send_th.start()
        self.recv_th.join()
        self.send_th.join()

    def receive_data(self):
        while True:
            try:
                print("等待接受ip")
                data, addr = self.server.recvfrom(1024)
                print(data,addr)
                if isinstance(data,bytes):
                    data = str(data,encoding="utf-8")
                # write_data(data,file_path)
                write_config_remote(data,config_file)
            except InterruptedError:
                exit()
            except Exception as e:
                pass
    def send_data(self):
        while True:
            try:
                my_ip = socket.gethostbyname(socket.gethostname()).encode()
                self.server.sendto(my_ip,(config.get("target","ip"),config.getint("target","port")))
                time.sleep(10)
            except InterruptedError:
                exit()
            except Exception as e:
                pass

if __name__ == "__main__":
    server = ConnectServer()
    server.start()

配置文件config.ini

[my]
ip = 0.0.0.0
port = 7771
name = zanghu

[target]
ip = 8.8.8.8
port = 7770

[remote]
ip = 1.1.1.1


参考

https://www.iteye.com/blog/happyqing-2352837

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值