Linux

在 ssh 配置結束時讀取和替換字元串(外部 ip)的 Bash 腳本

  • January 24, 2019

我需要一個腳本來獲取外部 ioaddress 並在 ssh 配置文件末尾替換

我到目前為止

#!/bin/sh
IP=$(wget http://ipecho.net/plain -qO-)

對於一個變數,我可以回顯,但需要一種方法在 ssh 配置中用新的外部 ip 替換目前的外部 ip,看起來像

Host $IP

   User UserName
   Port 22
   IdentityFile ~/.ssh/id_rsa

Host home

   HostName 192.168.0.1

Host away

   HostName 97.113.55.62

遠離是外部的

所以我需要的是替換我的 ssh 配置 ex 中的外部 ip。主機名 192.168.0.1(舊 IP) 主機名 192.168.0.2(新 IP)

我們還需要確定 OLDIP,因為這是我們要替換的:

OLDIP=`grep -w away -A 1 /etc/ssh/ssh_config | awk '/Hostname/ {print $2}'`

此處 Hostname 行必須恰好位於該Host away行下方,否則您必須調整-A 1-A 2.


-w away匹配你有單詞的那一行

-A 1在之前匹配的行之後顯示一行

awk '/Hostname/ {print $2}'從之前匹配的那幾行中,我們只保留 Hostname 行,並且我們只保留第二列。


然後我們只做一個 sed 用 IP 替換 OLDIP。

sed -i "s/$OLDIP/$IP/g" /etc/ssh/ssh_config

洞的東西看起來像:

#!/bin/sh
IP=$(wget http://ipecho.net/plain -qO-)
OLDIP=`grep -w away -A 1 /etc/ssh/ssh_config | awk '/Hostname/ {print $2}'`
sed -i "s/$OLDIP/$IP/g" /etc/ssh/ssh_config

引用自:https://unix.stackexchange.com/questions/272175