SSH 使用技巧


在实际开发过程中,ssh 是必不可少的,在本文中我们将详细描述关于 ssh 的使用,如: 转发、代理、配置等等

ssh|sshd 服务

  • 服务管理(启动/关闭/重启)
$ sudo service ssh|sshd start/status/stop
or
$ /etc/init.d/ssh|sshd start

配置ssh

  • 生成key
  • 配置.ssh/config
$ ssh-keygen -t rsa                             //生成key
$ ssh-add                                       //秘钥加入ssh-agent
$ ssh-add -l                                    //查看
$ cat ~/.ssh/id_rsa.pub >> authorized_keys
$ vim ~/.ssh/config
Host mid
     User saboloh                               //配置默认用户

ssh 端口转发

  • 端口转发/代理
$ /usr/bin/ssh -f -N -Llocalhost:10000:10.126.215.131:10000 root@10.126.97.98
$ ssh -fNg -L 3309:10.126.81.130:3306 hadoop@10.126.81.130
$ /usr/bin/ssh -f -N -D 0.0.0.0:8081 localhost

本地查看端口:
$ telnet localhost 10000

如果服务器报错:
open failed: administratively prohibited: open failed

这是由于代理机器的ssh服务部支持转发 换过一台机子

使用ssh配置socks代理

  • 创建本地代理
$ ssh -f -N -D 0.0.0.0:8081 localhost
  • 使用node.js实现FindProxyForURL
    • app.js
    • index.html
//app.js
var express = require('express');
var path = require('path');
var app = express();


app.use(express.static(path.join(__dirname, 'public')));

app.listen(3000, function () {
  console.log('Example app listening on port 3000!');
});

//index.html
function FindProxyForURL(url, host) {
  if (host.indexOf('10.') == 0 ||
    host.indexOf('tjtx-') == 0 ||
    host.indexOf('db20-') == 0 ||
    host.indexOf('ods10-') == 0
    ) {
    return "SOCKS 10.249.14.41:8081;";
  }
    return "SOCKS 10.249.14.41:8081;";
}
  • 用supervisor守护node.js 进程
[program:app]
directory = /home/saboloh/dwetl/socks
command = /home/saboloh/developer/node-v5.1.0-linux-x64/bin/node app.js
user = root
stdout_logfile = /home/saboloh/dwetl/socks/log
redirect_stderr = true
  • 配置url
http://localhost:3000