1、准备两台或三台机器,各机器之前的网络关系为:
目的:机器A能够主动通过ssh访问机器C,或者机器B能够主动通过ssh访问机器C
2、准备工作
在机器B上安装ssh:
sudo apt-get install openssh-server
在机器C上安装ssh和autossh:
sudo apt-get install openssh-server autossh
3、ssh命令详解
反向代理
ssh -fCNR
正向代理
ssh -fCNL
-f 后台执行ssh指令
-C 允许压缩数据
-N 不执行远程指令
-R 将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口
-L 将本地机(客户机)的某个端口转发到远端指定机器的指定端口
-p 指定远程主机的端口
4、在机器C进行以下操作,建立机器C到机器B的反向代理,并设置为机器C开机自启动
(1)在机器C上将建立反向代理的命令保存到脚本中,编辑脚本/etc/init.d/autossh_tunnel.sh,脚本内容如下:
#!/bin/bash
/usr/bin/autossh -fCNR 20000:localhost:22 root@123.123.123.123 -i ~/.ssh/id_rsa
注,反向代理建立命令的含义:
ssh -fCNR [B机器端口]:[C机器的IP]:[C机器端口] [登陆B机器的用户名@机器B的IP]
(2)保存后,将该脚本设置为所有用户可读可写可执行:
sudo chmod -R 777 /etc/init.d/autossh_tunnel.sh
(3)将该脚本设置为开机自动执行,编辑脚本/etc/rc.local,在exit 0之前添加如下内容:
su - ubuntu -s /bin/bash /etc/init.d/autossh_tunnel.sh &
注:其中ubuntu为机器C的用户名
5、在机器C上执行以下命令生成公私钥对
注:执行以下命令,一路回车即可,提示输入密码时,不要输入。其中ubuntu为机器C的用户名。
su - ubuntu
ssh-keygen -t 'rsa'
6、在机器C上执行以下命令将机器C的公钥安装到机器B
su - ubuntu
ssh-copy-id -i ~/.ssh/id_rsa root@123.123.123.123
注:最后一步会要求输入机器B的root用户的密码
7、在机器B上执行以下命令建立正向代理
ssh -fCNL '*:10000:localhost:20000' localhost
注:
(1)如果要设置为开机自动建立正向代理,则将这条命令添加到/etc/rc.local文件的exit 0代码前。
(2)10000为本地转发端口,*表示可以接受任何IP的访问,20000为与机器C通信的数据端口,正向代理建立命令的具体含义:
ssh -fCNL *:[B机器用来转发的端口]:[B机器的IP]:[B机器端口] [登陆B机器的用户名@B机器的IP]
(3)如果机器B为一台公网租赁的服务器,则需要注意到该服务器所属的企业云官网打开端口10000和20000的安全出入规则。
8、重启机器C之后验证测试
(1)如果机器A为windows机器,则通过SSH或Xshell工具,登录IP为机器B的IP,端口为10000,用户名为机器C的登录用户名(这儿测试用的是ubuntu),密码为机器C该用户名对应的登录密码;
(2)如果机器A为linux机器,则通过命令行执行登录:
ssh -p 10000 ubuntu@123.123.123.123
注:-p指定端口,此处为机器B用来转发的端口,ubuntu为机器C的登录用户名,最后的IP为机器B的IP。
(3)在机器B上测试登录机器C,执行命令与步骤(2)一样。