Ada*_*tan 36 ssh tunneling ssh-tunnel
我编写了一个小的bash脚本,它需要一个ssh隧道来从远程服务器中绘制数据,因此它会提示用户:
echo "Please open an ssh tunnel using 'ssh -L 6000:localhost:5432 example.com'"
Run Code Online (Sandbox Code Playgroud)
我想检查用户是否已打开此隧道,如果没有隧道,则退出并显示错误消息.有没有办法查询ssh隧道,即检查本地端口6000是否真的通过隧道连接到该服务器?
rxw*_*rxw 45
Netcat是你的朋友:
nc -z localhost 6000 || echo 'no tunnel open'
Run Code Online (Sandbox Code Playgroud)
Tom*_*mmy 31
这是我的考验.希望它有用.
# $COMMAND is the command used to create the reverse ssh tunnel
COMMAND="ssh -p $SSH_PORT -q -N -R $REMOTE_HOST:$REMOTE_HTTP_PORT:localhost:80 $USER_NAME@$REMOTE_HOST"
# Is the tunnel up? Perform two tests:
# 1. Check for relevant process ($COMMAND)
pgrep -f -x "$COMMAND" > /dev/null 2>&1 || $COMMAND
# 2. Test tunnel by looking at "netstat" output on $REMOTE_HOST
ssh -p $SSH_PORT $USER_NAME@$REMOTE_HOST netstat -an | egrep "tcp.*:$REMOTE_HTTP_PORT.*LISTEN" \
> /dev/null 2>&1
if [ $? -ne 0 ] ; then
pkill -f -x "$COMMAND"
$COMMAND
fi
Run Code Online (Sandbox Code Playgroud)
小智 20
Autossh是最佳选择 - 检查过程在所有情况下都不起作用(例如僵尸进程,网络相关问题)
例:
autossh -M 2323 -c arcfour -f -N -L 8088:localhost:80 host2
Run Code Online (Sandbox Code Playgroud)
Igo*_*any 12
这实际上更像是一个serverfault类型的问题,但您可以使用netstat.
就像是:
# netstat -lpnt | grep 6000 | grep ssh
Run Code Online (Sandbox Code Playgroud)
这将告诉您是否有ssh进程侦听指定的端口.它还会告诉你进程的PID.
如果你真的想要仔细检查ssh进程是否使用正确的选项启动,那么你可以通过PID查找过程
# ps aux | grep PID
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
87219 次 |
| 最近记录: |