博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

ssh tunnel 亲测成功

Posted on 2014-10-30 23:08  bw_0927  阅读(1186)  评论(0)    收藏  举报

http://blog.zjutoe.net/?p=95

 

场景:

你有一个公网服务器B的ssh账号

公司内网一台你的主机C

在家里有一台电脑A

 

目标:

A通过B访问C

 

实现:

1.在c上执行以下命令,建立一个反向通道

ssh -f -N -R 9999:localhost:22  username@publicIP

注解:-fN参数,这样把ssh进程放到后台运行,且无需打开服务器端的shell

把发往publicIP主机9999端口的数据转发到本地的22(ssh)端口

这条命令会在公网主机b上建立一个listen在9999端口的套接字(sshd),主机c作为ssh的客户端链接作为sshd服务器的主机b,

当在主机b上kill掉端口9999对应掉进程时,主机c的ssh会话会断掉

 

tcp        0      0 127.0.0.1:9999              0.0.0.0:*                   LISTEN      24290/sshd          

tcp        0      0 ::1:9999                        :::*                        LISTEN      24290/sshd

 

2.在a上ssh登录到b上

ssh username@publicIP

 

3.通过第二步建立到ssh session,在b上执行

ssh -p 9999 localhost

这就建立了一个b到c到ssh会话

 

=====ssh-keygen===自动登录

1. Client端: 
cd ~/.ssh 
#产生公钥文件(id_dsa.pub)和私钥文件(id_dsa), 类型DSA, 长度1024 bits 
#注意询问passphrase的时候直接回车 
ssh-keygen -t dsa -b 1024 
#将公钥复制到远程主机去 
scp id_dsa.pub Server:~/.ssh/id_dsa.pub.Client2. Server端: 
cd ~/.ssh 
#将Client的公钥放入Server的信任列表 
cat id_dsa.pub.Client >> authorized_keys 
#更新权限,很重要 
chmod 0600 *从此以后Client SSH登录Server就不要手工输入密码了。

======

a要自动登录b

1.在a上执行ssh-keygen

$ ssh-keygen
...(一直按Enter,最后在~/.ssh/下生成密钥)
$ ls ~/.ssh/
id_rsa id_rsa.pub known_hosts


2.复制a主机上生成的id_rsa.pub公钥到b主机上,并将内容加入到~/.ssh/authorized_keys中

$ cat id_rsa.pub >> ~/.ssh/authorized_keys

3.再从a ssh登录到b时,不再需要密码了



=========异常中断后,重启方向连接-=====

#!/bin/bash 
while true;do 
RET=`ps ax | grep "ssh -f -N -R 10000:localhost:22" | grep -v "grep"` 
if [ "$RET" = "" ]; then 
echo "restart ssh server" 
ssh -f -N -R 10000:localhost:22 lyb@hahalee.jb51.net 
fi 
sleep 10 
done