windows同时连接内外网

作者:matrix 发布时间:2022-08-31 分类:command 零零星星

有些环境是内网使用网线连接,而外网需要通过wifi上网,不能同时连接内外网。

Windows本地环境:

172.27.9.1 # 外网网关     
172.27.9.64 # 外网IP
10.211.132.69 #内网ip 

route print

超管权限运行:

route print

图片5525-windows同时连接内外网

找到自己的有线网卡序号,这里为5

route add

route add -p 172.0.0.0 mask 255.0.0.0  172.27.9.64 if  5

按照自己本机ip,执行上面命令。
之后重启windows即可实现内外网同时可用。

最终效果

C:\Users\admin>route print
===========================================================================
接口列表
 14...a4 bb 6d 4a 0c 0a ......Realtek PCIe GbE Family Controller
 10...08 d2 3e 98 58 ec ......Microsoft Wi-Fi Direct Virtual Adapter
  9...0a d2 3e 98 58 eb ......Microsoft Wi-Fi Direct Virtual Adapter #2
  3...08 d2 3e 98 58 eb ......Intel(R) Wireless-AC 9462
 18...08 d2 3e 98 58 ef ......Bluetooth Device (Personal Area Network)
  1...........................Software Loopback Interface 1
===========================================================================

IPv4 路由表
===========================================================================
活动路由:
网络目标        网络掩码          网关       接口   跃点数
          0.0.0.0          0.0.0.0       172.27.9.1      172.27.9.64     40
         10.0.0.0        255.0.0.0     10.211.132.1      172.27.9.64     41
         10.0.0.0        255.0.0.0    10.211.132.69      172.27.9.64     41
       10.211.0.0      255.255.0.0     10.211.132.1    10.211.132.69     26
     10.211.132.0    255.255.255.0            在链路上     10.211.132.69    281
    10.211.132.69  255.255.255.255            在链路上     10.211.132.69    281
   10.211.132.255  255.255.255.255            在链路上     10.211.132.69    281
        127.0.0.0        255.0.0.0            在链路上         127.0.0.1    331
        127.0.0.1  255.255.255.255            在链路上         127.0.0.1    331
  127.255.255.255  255.255.255.255            在链路上         127.0.0.1    331
       172.27.9.0    255.255.255.0            在链路上       172.27.9.64    296
      172.27.9.64  255.255.255.255            在链路上       172.27.9.64    296
     172.27.9.255  255.255.255.255            在链路上       172.27.9.64    296
        224.0.0.0        240.0.0.0            在链路上         127.0.0.1    331
        224.0.0.0        240.0.0.0            在链路上     10.211.132.69    281
        224.0.0.0        240.0.0.0            在链路上       172.27.9.64    296
  255.255.255.255  255.255.255.255            在链路上         127.0.0.1    331
  255.255.255.255  255.255.255.255            在链路上     10.211.132.69    281
  255.255.255.255  255.255.255.255            在链路上       172.27.9.64    296
===========================================================================


我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=3ab5kpykd2ww0

vscode remote-ssh 内网穿透远程开发调试

作者:matrix 发布时间:2021-10-07 分类:command Linux

线上代码有时候会需要部署到内网或者防火墙后面的本地服务器环境,这个时候发布代码或者调试都会造成不便。

使用环境

测试环境为 mac vscode

windows版本的操作相差不大。

vscode作为ide编辑器,也作为文件管理工具来上传下载服务器文件。需要安装Remote - SSH插件完成这些功能。

目的

本地环境可以直接编辑操作远程服务器中的文件,当然这非常危险和忌讳!

修改文件前你需要做备份然后灾难还原 😀

路径也很清晰,通过中转来访问:

localhost -> jump -> target-service

本地电脑连接中转服务器,再通过中转服务器连接后端的target-service完成操作。

配置ssh

插件安装之后按F1键打开命令行,找到remote-ssh相关文件配置命令。
图片5271-vscode remote-ssh 内网穿透远程开发调试

或者可以直接修改~/.ssh/config文件

配置

# 中转服务器
Host jump-box
    HostName 118.X.X.11
    User root
    # IdentityFile ~/.ssh/jumpbox

# 需要连接的目标服务器 即后端的非暴露地址
# Target machine with private IP address
Host target-box
    HostName 192.168.1.11
    User root
    # IdentityFile ~/.ssh/target
    ProxyCommand ssh -q -W %h:%p jump-box

说明:
如果服务器有设置密钥登录,IdentityFile参数用于设置私钥文件地址。

连接

配置完成之后,点击左侧的remote - ssh插件的选项页面,就能看到配置的服务器。包含jump-box,target-box

图片5272-vscode remote-ssh 内网穿透远程开发调试

之后打开连接,点击右侧的文件夹📁图标打开新窗口,vscode会进行连接请求。若是密码登录请求则会让你输入密码,依次连接jump-box,target-box服务器,且最终停留在target-box服务器上,可以在线编辑操作非常方便。

vscode连接成功后,左下角会有绿色连接提示。

文件操作

和其他编辑器的基本功能都是一样,代码文件直接编辑保存,之后会自动上传到服务器。

如果想上传文件需要在vscode中找到要上传的文件或目录,点击右键复制。之后服务器的vscode窗口中点击右键粘贴。

图片5275-vscode remote-ssh 内网穿透远程开发调试

参考:

https://code.visualstudio.com/blogs/2019/10/03/remote-ssh-tips-and-tricks

http://kb.ictbanking.net/article.php?id=639

https://code.visualstudio.com/docs/remote/ssh

https://kenzoluo.github.io/2020/03/13/VScode%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F%E7%9A%84%E9%85%8D%E7%BD%AE%E6%95%99%E7%A8%8B/

https://xirikm.net/2019/619-1

autossh自动输入密码且断线重连

作者:matrix 发布时间:2020-10-28 分类:command Linux

mac上使用ssh命令隧道转发访问内网会出现经常断连的情况,每次都需要重启窗口执行命令,没有windows上xshell上隧道设置来的简单好用。当然,后面我发现Termius.app支持端口转发后,依然觉得autossh的方式香~

换用autossh来代替ssh,只需要添加-M参数用于设定监听的本地端口,本地不被占用的都可以。

autossh安装

autossh就用来解决断线重连的问题。

测试环境为macos

autossh安装:brew install autossh

要自动免密码登录目前知道两个方法:

方法1 密钥登录

无密码密钥登录,配合autossh可以稳定使用。

方法2 autossh+expect

这里主要介绍自动输入密码的方式,可以解决各种场景的问题。

使用autossh+expect的方式用脚本操作,支持ssh登录密码、密钥密码都可配置输入,所以这个是真正能解决很多自动化处理的问题。

autossh.sh文件

#!/bin/bash
# macos下测试使用
# 执行之后在窗口中ctrl+c终止连接进程

PASS='XXXXX' #ssh登录密码
CMD=$@
BASE_CMD='/usr/local/bin/autossh' # autossh 执行路径
trap 'ps aux|grep "$BASE_CMD $CMD" |grep -v grep | awk "{print \$2}" | xargs kill &>/dev/null && echo "stop done.\n"' 2 # ctrl + c 按键后执行命令终止子进程

VAR=$(expect -c "
spawn $BASE_CMD $CMD
match_max 100000;

while (1) {
    # 匹配关键字password,之后发送密码
    expect \"*?password:*\" {send -- \"$PASS\r\"}

    # 下面的方式执行失败
    #set connectedFlag 0;
    # set timeout 60;
    # expect {
    #     '?sh: Error*'
    #         { puts 'CONNECTION_ERROR'; exit; }
    #     '*yes/no*'
    #         { send 'yes\r'; exp_continue; }
    #     '*?assword:*' {
    #          # send '$PASS\r'; set timeout 4;
    #          send -- \"$PASS\r\"
    #          expect '*?assword:*' { puts 'WRONG_PASSWORD'; exit; }
    #          set connectedFlag 1;
    #     }
    #     # if no password
    #     '*~*'
    #         { send 'echo hello\r'; set connectedFlag 1; }
    # }
}

")
echo "==============="
echo "$VAR"

tail -f /dev/null # 前台挂起主进程

注意:

密码中出现脚本元字符$需要转义处理\$

如果ssh命令指定密钥登录提示输入密码passphrase,一样的操作需要匹配关键字passphrase然后发送密码和回车符即可。

脚本中自动输入密码的实现方式也有其他,比如sshpass

使用

bash ./autossh.sh -M 1234  -p 22 -L 127.0.0.1:8088:182.18.1.2:8088 root@SERVER_HOST

说明:

-M 1234 :autossh的参数用于监听ssh是否断线。如果启动多个隧道命令,此端口不能重复使用,随意更换即可。

127.0.0.1:8088:182.18.1.2:8088,连接服务器后将服务器182.18.1.2:8088转发到本地127.0.0.1:8088

ctrl + c 按键终止

参考:

http://www.ouvps.com/?p=790

http://www.ouvps.com/?p=792

autossh参数参考:
http://www.freeoa.net/osuport/netmanage/autossh-useage-refer_2831.html

http://www.freeoa.net/osuport/netmanage/ssh-automatic-login-config_285.html

https://cloud.tencent.com/developer/ask/89349

https://blog.csdn.net/csdn_changsha/article/details/103631673

https://blog.mimvp.com/article/10072.html

https://www.cnblogs.com/hongdada/p/13711688.html

awk入门小记

作者:matrix 发布时间:2019-11-06 分类:command Linux

图片5055-awk入门小记

awk用于unix的文本处理,经常出现和使用。读取每一行文本进行格式化输出。

测试环境 Macos

awk简单操作

默认使用空格进行字符串分割

echo '1 2 3' |awk '{print $0}' # 1 2 3

echo '1 2 3' |awk '{print $3}' # 3

echo -e "1\n2\n3" |awk '/[23]/' #正则条件查找

echo -e "abc\n1a2\n33" |awk '/a/' #正则条件查找字母a 

awk '{print $3}' file_path #指定文件

ls -alh|awk '/^d/' #输出目录
# drwxr-xr-x    3 panc  staff    96B  7 16 23:32 pt-program

echo '1-2-3' |awk -F '-' '{print $2}' #指定分割符号 -  输出 2

$0表示当前行
$1表示第一个分割的字段

awk命令后面跟操作的语句字符串''包裹,每个语句段落用花括号{}包裹,语句段落中用分号;分隔语句。

echo -e '1 2 3\n4 5 6' |awk '{print $0;print("-end-")}'
echo -e '1 2 3\n4 5 6' |awk '{print $0;}{print("-end-")}'
#上面输出结果相同
#1 2 3
#-end-
#4 5 6
#-end-


echo -e '1 2 3\n4 5 6' |awk '{print $1,$3}'
#输出
#1 3
#4 6

使用内置变量

NF表示当前行有多少个分割字段

echo  '1-2-3' |awk -F '-' '{print $(NF)}' # 3  获取最后一个分割字符
echo  '1-2-3' |awk -F '-' '{print $(NF-1)}' # 2  获取倒数第二个分割字符

其他变量
NR表示当前处理的是第几行

BEGIN预处理

在执行处理之前提前设置一些信息
比如之前的-F参数可以使用BEGIN来设置

echo -e "a-b-c" |awk 'BEGIN{FS="-"} /^a/{print $0}' #设置分割符为-

echo -e "a-b-c" |awk 'BEGIN{FS="-";print "this title::"} {print $0}' #设置输出的首行标题

echo -e "1122\n3344" |awk 'BEGIN{FIELDWIDTHS="2 2";} {print $1,$2}' #固定字段宽度  (mac os中测试失败)
#输出
#11 22
#33 44

内置变量
FS字段分隔符
FIELDWIDTHS指定字段宽度
ORS指定输出的行分隔符

if逻辑处理

awk还可以支持函数和复杂的逻辑处理,完全可以在里面定义函数 调用 判断

例子:
显示红色error
绿色seccess
白色log


echo -e 'success\nerror\nsuccess\nloginfo' | awk \ '{ if (/error/) { print "\033[91m" $0 "\033[0m" } else if (/success/){ print "\033[32m" $0 "\033[0m"; }else{ print $0 } next; }'

上面语句有换行的段落方便阅览。一行简写也是可以
例子:
判断值大小

echo -e '12\n14\n232\n90' |awk '{if($0>=90) print $0}' #输出>=90的数据
#232
#90

for循环

使用for循环计算求和


echo '5' |awk '{ \ total = 0 for (var = 1; var < $0; var++) { total += var } print "total:",total }'

Built-In Functions函数使用

awk中语义中支持函数的使用

echo -e 'H htjim\nDot\ncom\n009' |awk '{print toupper($0)}'#转换为大写

内置函数
toupper 转换为大写
tolower 转换为小写
rand 随机数

其他函数参考手册:
https://www.gnu.org/software/gawk/manual/html_node/Built_002din.html#Built_002din

自定义函数

自定义彩色文字输出函数awk内部执行调用


echo -e 'success\nerror\nsuccess\nloginfo' | awk \ ' function red(s) { printf "\033[1;31m" s "\033[0m " } function green(s) { printf "\033[1;32m" s "\033[0m " } function blue(s) { printf "\033[1;34m" s "\033[0m " } { if (/error/) { print red($0) } else if (/success/){ print green($0) }else{ print blue($0) } }'

其他例子

结合tail -f log显示红色报错提示

 tail -f test.log |  awk '{
 if (/success/) {
 print "\033[91m" $0 "\033[0m"
 } else {
 print "\033[32m" $0 "\033[0m"; 
 }
 next;
}';

next用于直接跳到下一行文本进行执行 有点continue的意思

参考:
https://likegeeks.com/awk-command/

http://www.ruanyifeng.com/blog/2018/11/awk.html

https://www.cnblogs.com/Linuxprobe/p/5745381.html

记linux输出重定向操作>&

作者:matrix 发布时间:2019-10-19 分类:command Linux

今天看到2>&1>/dev/null 2>&1有点相似但又完全不同,一直都是CV方式来使用 仅知道后者用于禁止所有输出信息。

简单整理笔记

基本操作符号和数字描述符号

>用于输出覆盖内容,>>用于输出追加内容
<用于输入,<<用于设置输入结束符号
<<end:表示当输入end的时候结束输入操作

/dev/null表示Linux中的空设备,也当是数据黑洞,无限吞噬。

类型 文件描述符 默认情况 对应文件句柄位置
标准输入(standard input) 0 从键盘获得输入 /proc/self/fd/0
标准输出(standard output) 1 输出到屏幕(即控制台) /proc/self/fd/1
错误输出(error output) 2 输出到屏幕(即控制台) /proc/self/fd/2

输出内容重定向

command >/dev/null 2>&1

这样执行就不会有任何信息显示和保存

补充命令之后:

command 1>/dev/null 2>&1

说明:

>/dev/null等同于1>/dev/null 意思是 当前控制台的信息输出到空设备。

2>&1使用&符号将2重定向绑定到1,意思是将错误信息指向控制台,而这个时候的控制台又指向了空设备。

如果去掉&符号的2>1会导致错误信息输出到文件名为1里面。

Linux执行命令时会按顺序从左到右读取来确定0,1,2这三个输入输出的位置。

command 2>&1 >/dev/null

把两个重定向的位置写反之后就是完全不同的意思。
等同于command 2>&1 1>/dev/null

linux执行命令到2>&1会将错误输出指向1即控制台,到这里就会完成错误输出(2)的位置确定。也就不会更改了。

执行到1>/dev/null会将标准输出(1)指向空设备,而此时的错误输出(2)已经确定位置了就不会发生更改。

所以最终错误信息显示到控制台,正常信息不会看到。

参考:
https://blog.csdn.net/zhaominpro/article/details/82630528
https://www.cnblogs.com/ultranms/p/9353157.html
https://blog.csdn.net/wz947324/article/details/80005224