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