公司有两台服务器:

cpp23: 外网可访问
cpp24: 外网不能访问,但可以从cpp23连接

现在临时需要从外网直接从ssh连接cpp24,使用本地端口转发

在cpp23如下操作:

# ssh -g -L 7001:cpp24:22 localhost

此外cpp23必须开放7001端口
#iptables -I INPUT -p tcp   –dport 7001 -j ACCEPT
这样从本地连接cpp23 的7001端口就可以直接从外网访问cpp24了。

数据流是这样的,cpp23将在7001接收到的数据加密后通过SSH隧道转发到cpp24的22端口。
-g表示全局监听,使这个端口可以被其他机器利用,不然只能在cpp23本地连接

——————————————————————————-

在公司内网有一台centos,没有公网IP,无法从外部直接访问,现在要让他可以被外网访问

同样可以通过cpp23进行SSH转发

在该centos执行以下命令

# ssh -g -R 7002:localhost:22 cpp23

这样访问cpp23的7002端口将转发到centos的22端口。这时centos作为ssh client,但作为提供ssh连接服务的ssh server,外网可以ssh 连接cpp23的7002端口实现访问了。

同时,cpp23也需要开放7002端口的外部访问。
#iptables -I INPUT -p tcp   –dport 7002 -j ACCEPT

或者如果只需要在cpp23上访问的话,不需要打开端口,只要这样操作
# ssh -p 7002 root@localhost
输入内网centos的密码即可

===============================================

使用完毕最好还是关掉这些端口和进程,以免被非法使用

终止进程
# ps aux | grep ssh | grep 7001
root      4296  0.0  0.0  57984  3600 pts/0    S+   15:17   0:00 ssh -g -L 7001:cpp24:22 localhost

此时取得pid为 4296

#kill -TERM 4296

删除第一条规则:
#iptables -t filter -D INPUT 1

SSH其他参数

-N:不執行任何指令
-f:背景執行

如远程反向连接指令可以改为
ssh -g -f -NR 7002:localhost:22 cpp23
这样就在后台安静运行了

===============================================
参考文章:http://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/

SSH密钥和ssh-copy-id
===============================================
生成密钥对

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

复制生成的id_rsa.pub公钥到需要登入的SSH服务端,
并将内容加入到~/.ssh/authorized_keys中

scp -r ~/.ssh/id_rsa.pub root@cpp23:/root/localcentos
ssh root@cpp23
cat /root/localcentos >> ~/.ssh/authorized_keys
rm /root/localcentos

这样以后从这台机器上登录cpp23就不用输入密码了

使用ssh-copy-id可以自动化完成这项工作

ssh-copy-id root@cpp23
——————————————————————————-
如果端口不是默认的22端口,可以这样使用
ssh-copy-id “-p 22000 nameB@machineB”

如使用远程端口转发需要这样配置
ssh-copy-id “-p 7002 root@localhost”

参考文章:
http://blogread.cn/it/article/6103?f=qqt
http://www.cnblogs.com/eshizhan/archive/2012/07/16/2592902.html

为建立持久稳定连接,可使用autossh
——————————————————————————-
1. 先安装编译环境
yum install gcc gcc-c++ gcc-g77 flex bison autoconf automake bzip2-devel zlib-devel ncurses-devel libjpeg-devel libpng-devel libtiff-devel freetype-devel pam-devel openssl-devel libxml2-devel gettext-devel pcre-devel
或者:yum groupinstall “Development tools”

2.wget http://www.harding.motd.ca/autossh/autossh-1.4c.tgz
然后./configure && make && make install 三步曲

3.用法
autossh [-V] [-M port[:echo_port]] [-f] [SSH_OPTIONS]
autossh -M 12345 -NfR 2222:localhost:22 me@MyServer -p22

-M参数指定echo端口,用于侦察连接是否断开,在反向连接到cpp23时这样操作:
autossh -M 12345 -gNfR 7002:localhost:22 root@cpp23

autossh -M 12345 -gNfR 7002:localhost:22 root@cpp23 [-p非22端口时指定端口]

需要开机启动autossh里
以daemon方式执行,相当于root去执行autossh, ssh,这时刚才普通用户目录下的.ssh/authorized_keys文件会不起效。有两种办法解决,一种是用autossh的参数指定.ssh路径;另外一种是以普通用户身份执行daemon,下面是第二种方式。

/bin/su -c ‘/usr/bin/autossh -M 5678 -NR 1234:localhost:2223 user1@123.123.123.123 -p2221’ – user1

参考文章:
http://www.harding.motd.ca/autossh/
http://portable.easylife.tw/2043
http://www.cnblogs.com/eshizhan/archive/2012/07/16/2592902.html
——————————————————————————-

- EOF -