Linux
在 ssh 配置結束時讀取和替換字元串(外部 ip)的 Bash 腳本
我需要一個腳本來獲取外部 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