作者: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
找到自己的有线网卡序号,这里为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
作者:matrix
发布时间:2021-10-07
分类:command Linux
线上代码有时候会需要部署到内网或者防火墙后面的本地服务器环境,这个时候发布代码或者调试都会造成不便。
使用环境
测试环境为 mac vscode
windows版本的操作相差不大。
vscode作为ide编辑器,也作为文件管理工具来上传下载服务器文件。需要安装Remote - SSH插件完成这些功能。
目的
本地环境可以直接编辑操作远程服务器中的文件,当然这非常危险和忌讳!
修改文件前你需要做备份然后灾难还原 😀
路径也很清晰,通过中转来访问:
localhost -> jump -> target-service
本地电脑连接中转服务器,再通过中转服务器连接后端的target-service完成操作。
配置ssh
插件安装之后按F1
键打开命令行,找到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
。
之后打开连接,点击右侧的文件夹📁图标打开新窗口,vscode会进行连接请求。若是密码登录请求则会让你输入密码,依次连接jump-box
,target-box
服务器,且最终停留在target-box服务器上,可以在线编辑操作非常方便。
vscode连接成功后,左下角会有绿色连接提示。
文件操作
和其他编辑器的基本功能都是一样,代码文件直接编辑保存,之后会自动上传到服务器。
如果想上传文件需要在vscode中找到要上传的文件或目录,点击右键复制。之后服务器的vscode窗口中点击右键粘贴。
参考:
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
作者: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
作者:matrix
发布时间:2019-11-06
分类:command Linux
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
作者: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