您的位置:首页 > 其它

ssh反向连接内网主机

2014-07-30 11:34 253 查看
首先在被控内网主机上运行:

ssh -f -N -R 10000:localhost:22 abc@3322.org -o ServerAliveInterval=60 [-p 51900]

10000端口:在主控端服务器使用的隧道端口,可任意指定

22端口:被控内网主机的ssh连接端口

-p 2222:连接主控端的ssh连接端口,默认为22的话可省略

abc@3322.org:连接主控端使用的用户名和域名或IP地址

-f 后台执行

-N 仅用作port forwarding,不带执行远程命令

-R Port forwarding,如上,在22端口和10000端口间建立一条通道 (port:host:hostport)

-o option 可以在这里给出某些选项, 格式和配置文件中的格式一样. 它用来设置那些没有命令行开关的选项

然后在主控端运行:

ssh def@localhost -p 51900

def:被控端服务器上已有用于ssh连接的用户名

启动一个启动脚本时刻监控该被控端的ssh进程

#!/bin/bash
while true;do
RET=`ps ax | grep "ssh -f -N -R 9999:localhost:22" | grep -v "grep"`
if [ "$RET" = "" ]; then
echo $(date)------------restart ssh server
ssh -f -N -R 9999:localhost:22 abc@abc.3322.org -p 10022 -o ServerAliveInterval=60
fi
sleep 1000
done


View Code
-----------------------------------------------------------------------------------------------------

解决ssh的"Write failed: Broken pipe"问题

问题现象:

用 ssh 命令连接服务器之后,如果一段时间不操作,再次进入 Terminal 时会有一段时间没有响应,然后就出现错误提示:

Write failed: Broken pipe


只能重新用 ssh 命令进行连接。

解决方法:

方法一:如果您有多台服务器,不想在每台服务器上设置,只需在客户端的 ~/.ssh/ 文件夹中添加 config 文件,并添加下面的配置:

ServerAliveInterval 60


方法二:如果您有多个人管理服务器,不想在每个客户端进行设置,只需在服务器的 /etc/ssh/sshd_config 中添加如下的配置:

ClientAliveInterval 60


方法三:如果您只想让当前的 ssh 保持连接,可以使用以下的命令:

$ ssh -o ServerAliveInterval=60 user@sshserver


---------------------------------------------------------------------------------------

ssh-copy-id使用非默认22端口时:ssh-copy-id "-p 5180 wjoyxt@abc.3322.org" (必须要有引号)
cat >> /etc/ssh/sshd_config << EOF
TCPKeepAlive yes 指定系统是否向客户端发送 TCP keepalive 消息。这种消息可以检测到死连接、连接不当关闭、客户端崩溃等异常,保证不会有僵尸程序的发生。
ClientAliveInterval 60 server端每60s就会向client端发送一个keep-alive包, 来保持连接
ClientAliveCountMax 10 指定发送keep-alive包(超时连接)的最大次数,超过该次数后会自动断开连接。
EOF
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: