gitlib备份sh脚本

gitLib定时备份代码

  1. 在备份的电脑创建git账户。useradd gitlib 。生成ssh密钥放入gitlib中

  2. 编写sh脚本

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #!/bin/sh
    # 用来定时备份test12的git代码

    # 当前shell脚本所在的目录
    TIME="date +%Y-%m-%d.%H:%M:%S"
    DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
    # 获取gitlib上的需要备份的项目
    PROJECT=(xxx zzz yyy)
    # 遍历上面的项目,确保在一组当中
    for DATA in ${PROJECT[@]}
    do
    DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
    echo "`$TIME` ----$DATA开始进行备份 $DIR";
    if [ -d $DIR/$DATA ]; then
    cd $DIR/$DATA
    back=`git pull`
    cd $DIR
    else
    back=`git clone git@git.kingsilk.xyz:kingsilk/$DATA.git`
    #echo "xxx"
    fi
    done;
  3. 执行 chmod +x script.sh赋予执行权限

  4. gitlib定时拉取代码 表示每小时执行一次备份

    1
    2
    crontab -e
    0 * * * * /home/gitlib/back/gitLibBack.sh 2>&1 >> /home/gitlib/back/gitLibBack.log
  5. gitlab命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    docker run --detach \
    --hostname 10.2.2.189 \
    --publish 7043:443 --publish 7070:80 --publish 7022:22 \
    --name gitlabs \
    --restart always \
    --volume /srv/gitlab/config:/etc/gitlab \
    --volume /srv/gitlab/logs:/var/log/gitlab \
    --volume /srv/gitlab/data:/var/opt/gitlab \
    registry.cn-hangzhou.aliyuncs.com/acs-sample/gitlab-sameersbn:latest

idea的一些常用设置

idea的一些常用设置

  1. 更改背景颜色

    1
    2
    File->settings->editor->colors&Fonts->General
    右边复制一份,选择:Text->Default text 勾选background 选择199 237 204;RGB:#C7EDCC
  2. 更换提示按键

    1
    2
    3
    4
    File->settings->keyMap 右边选择eclipse 同时点击保存复制
    修改代码提示按键:点击搜索
    1. 移除原来的Cycle Expand Word 的 Alt+斜杠 快捷键绑定。
    2. 在 Basic 上点击右键,去除原来的 Ctrl+空格 绑定,然后添加 Alt + 斜杠 快捷键。
  3. 更换字体

    1
    2
    File->settings->editor->colors&Fonts->Font
    size:16 字体:courier New
  4. 项目清空缓存

    1
    2
    File -> Invalidate caches
    Build->Reubuild Project
  1. 关闭面板
    1
    搜索ctrl+W  去除掉,选择:editor tabs->close添加ctrl+w

java中doc转html,poi openoffice libreoffice

doc转html

POI,Office,libreoffice,openoffice

  1. linux中无法调用windows的office组件来进行转换。微软office组件解析最佳
  2. linux下libreoffice解析最佳
  3. poi工具适用于简单转换。无法兼容doc下的数学公式。只对普通文本有效果
  4. openoffice存在同样与poi一样的问题。
    结论:windows下可以使用libreoffice 微软office。linux只有libreoffice

libreoffice在java中使用

  1. libreoffice链接
  2. 安装步骤。 大写的省略
  3. 安装完成后需要启动监听端口:

soffice -headless -accept=”socket,port=8100;urp;”

部分电脑可能需要输入:soffice -headless -accept=”socket,host=127.0.0.1,port=8100;urp;” -nofirststartwizard


java中使用

  1. 百度的结果

    1
    2
    3
    4
    5
    6
    7
    8
    1. 引入maven:--------------------- 
    <dependency>
    <groupId>com.artofsolving</groupId>
    <artifactId>jodconverter</artifactId>
    <version>2.2.2</version>
    </dependency>
    注: com.artofsolving 已经不维护。maven仓库版本最高只有2.2.1 。而且不支持docx的解析。2.2.2需要自己去其他地方下载
    ----------------------------
  2. artofsolving已经代码公开,目前已经由org.jodconverter 接手

1
2
3
4
5
6
maven引入:
<dependency>
<groupId>org.jodconverter</groupId>
<artifactId>jodconverter-local</artifactId>
<version>4.2.2</version>
</dependency>
  1. github连接地址:https://github.com/sbraconnier/jodconverter

jmeter测试工具

使用jmeter进行压力测试

使用jmeter

  1. 建立请求,这里就不写了。

压力测试

  1. 使用压力测试有一列(aggregate graph)
1
2
3
   聚合报告如下图所示,每一列的含义分别表示请求名称,请求总数,请求的平均响应时间(毫秒),50%的请求的响应时间,90%的请求的响应时
间,95%的请求的响应时间,99%的请求的响应时间,最小的响应时间,最大的响应时间,错误的请求率(错误请求数/总的请求数),吞吐量(每秒处理的
请求数),接收的字节速率,发送的字节速率

mongodb常用命令

mongodb常用操作

  1. 添加用户名

    1
    2
    3
    4
    5
    db.createUser( {
    user: "test",
    pwd: "test",
    roles: [ { role: "dbOwner", db: "test" } ]
    });
  2. 删除数据库

    1
    2
    db.dropDatabase()
    这将删除选定的数据库。如果还没有选择任何数据库,然后它会删除默认的 ' test' 数据库
  3. 删除用户

    1
    db.system.users.remove({user:"java1"});
  4. 克隆数据库

    1
    db.copyDatabase(fromdb, todb, fromhost, username, password)  // username是fromdb的数据库名
  5. 更新数据

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    1).update()命令

    db.collection.update( criteria, objNew, upsert, multi )
    db.collection.update( {id:"11"}, {$set:{id:"22"}}, {multi:true} ) // 将所有id=11的更新成id=22
    criteria : update的查询条件,类似sql update查询内where后面的
    objNew : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
    upsert : 这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
    multi : mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

    db.test0.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } ); 只更新了第一条记录
    db.test0.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true ); 全更新了
  6. 管道概念,参考官方网址

    1
    2
    3
    4
    5
    6
    7
    查询一个条件后进行一个条件
    db.oldUser.aggregate({$project:{address:1,gender: 1}},{$skip:1},{$limit:1});
    上面语句意思是,返回数据只包含address和gender字段,略过第一条数据,只返回一条数据。如果limit和skip反过来,则是返回一条数据,同时略过,则返回为空。管道按照顺序来
    db.oldUser.aggregate({$match:{ $or:[ {origin:"淘宝",$or:[{address:"上海"},{_id:"111"},{address:"杭州"}]},{origin:"淘宝",_id:"111"}] } });
    // 查询字段 (来自淘宝同时地址要是上海或者id是xxx或者是杭州)或者(来自淘宝同时id是xxx)
    db.oldUser.aggregate({$match:{ $or:[{origin:"淘宝"]}},{$match:{ $or:[{address:"天猫"]}});
    // and查询,既要是来自淘宝,同时地址还是天猫的
  7. 查询字段为空

1
2
3
4
5
6
db.getCollection('maodoudou').find({scroe:{$in:[null], $exists: true}}) // 查询该字段存在,值为null
db.getCollection('maodoudou').find({scroe:{$in:[null], $exists: false}}) // 查询该字段值为null,不管字段是否存不存在,没有字段也视为null
db.getCollection('adc').find({$or:[{_id:"110000"},{_id:"110101"}]}) // mongodb or查询
db.getCollection('adc').find({$and:[{_id:"110000"},{name:"北京市"}]}) // and查询

db.hotelBillsOrder.aggregate({$unwind: "$orderItems"},{$group:{_id:null,count:{$sum:"$orderItems.day"}}})

mongodb的安装/启动/集群

mongodb的安装

  1. 复制mongo.conf 进行配置文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    # mongod.conf

    # for documentation of all options, see:
    # http://docs.mongodb.org/manual/reference/configuration-options/
    net:
    port: 27010
    bindIp: 127.0.0.1

    processManagement:
    pidFilePath: /data0/mongod/mongod1.pid
    fork: true

    storage:
    dbPath: /data0/mongod/data/shard1
    directoryPerDB: true

    systemLog:
    destination: file
    path : /data0/mongod/log/shard1/mongodb.log
    logAppend: true

    replication:
    replSetName: rs0
    oplogSizeMB: 1000
    # security:
    # authorization: enabled

    单机不需要replication参数
  2. 运行 我的mongodb

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    bin/mongod -f xxx/mongod.conf 启动服务
    bin/mongod -shutdown -f xxx/mongod.conf 停止服务
    mongod 密码验证,刚开始。注释上面security:
    进入mongodb /use admin库
    创建超级用户db.createUser({
    user: "admin",
    pwd: "admin",
    roles:
    [{
    role: "userAdminAnyDatabase",
    db: "admin"
    }]})
    在开启上面配置文件的 security。这时候mongodb将使用密码访问
  3. mongodb开机启动

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    [Unit]
    Description=MongoDB Server
    After=network.target

    [Service]
    User=mongod
    Group=mongod
    Type=forking

    PIDFile=/data0/mongod/mongod1.pid
    ExecStartPre=
    ExecStart=/usr/local/mongodb1/bin/mongod -f /usr/local/mongodb1/mongod.conf
    ExecReload=/usr/local/mongodb1/bin/kill -s HUP $MAINPID
    ExecStop=/usr/local/mongodb1/bin/kill -s QUIT $MAINPID
    WorkingDirectory=/data0/mongod
    Restart=always

    LimitFSIZE=infinity
    LimitCPU=infinity
    LimitAS=infinity
    LimitNOFILE=64000
    LimitRSS=infinity
    LimitNPROC=64000

    PrivateTmp=true

    [Install]
    WantedBy=multi-user.target

mongodb集群服务

  1. mongodb配置一组relica sets。 仲裁节点(偶数台需要,奇数台不需要,作用是偶数台电脑,照成投票平均,仲裁节点可以增加票数)

  2. 注:请先登陆到admin数据库在进行操作,否则后续操作会出错 (重点)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    ntpdate ntp.api.bz  集群时,首先执行命令 同步时钟(重要)
    mongod1.conf。可以多复制几个,使用一个mongod同时运行。
    mongo -port xx // 链接到其中一台mongodb服务器上去
    configx = {_id:"rs0",version:1,members:[{_id:0,host:'127.0.0.1:27010',priority :2},{_id:1,host:'127.0.0.1:27020',priority:1},{_id:2,host:'127.0.0.1:27030',priority:1}]} // 添加各个节点上去
    rs.initiate(configx) // 初始化一个 replica sets
    rs.conf() // 查看获取的配置
    rs.reconfig(configx,{force:true}) // reconfig() 用来重新执行文档,force:true 是否覆盖以前
    rs.status() // 查看状态。
    备注:从库只读 需要 rs.slaveOk();可以设置为只读 不可以写
  3. mongod sharding configServer配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    configServer的配置和mongod1.conf要多加如下面一句话。只需要dbpath和logpath换下就行

    **sharding:**
    **clusterRole: configsvr**

    configServer也需要dbpath

    另外#replication:replSetName:xxx 尽量别和replica set中的重名。否则mongos添加shard时通过Id会有可能找成configServer。非一台电脑可以不换,只需要不冲突就行,

    configx = {_id:"configrs0",configsvr: true,members:[{_id:0,host:'127.0.0.1:27010',priority :2},{_id:1,host:'127.0.0.1:27020',priority:1},{_id:2,host:'127.0.0.1:27030',priority:1}]} // 添加各个节点上去
  4. mongod sharding mongos路由的配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    net:
    port: 20000
    bindIp: test13.kingsilk.xyz

    processManagement:
    pidFilePath: /data0/mongod/mongos.pid
    #fork: true

    systemLog:
    destination: file
    path : /data0/mongod/log/mongos/mongodb.log
    logAppend: true

    sharding:
    configDB: xxxxxxxx:27000,xxxxxx:28000,xxxxxxx:29000
    mongos.conf 配置文件
    启动:mongos -f mongos.conf
  5. 集群后的配置

    1
    2
    键入:mongo -host xx -port xx   mongos的地址
    sh.addShard("rs0/xxx:27010,txx:27020,xxx27030"); // 刚才输入的一组replica set。如果rs0和configServer中的replicationName一样。则可能会添加失败.修改Id 别冲突

mongodb密码登录 一些快速创建密码账户,可以略过不用看

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

db.createUser(
{
user: "admin",
pwd: "admin",
roles:
[
{
role: "userAdminAnyDatabase",
db: "admin"
}
]
}
)
db.createUser(
{
user: "repl",
pwd: "replication",
roles: [
{ role: "readWrite", db: "admin" }
]
}
)

db.createUser(
{
user:"root",
pwd:"root",
roles:["root"]
}
)

集群的密码配置(先看完上面的)

  1. linux 命令行:openssl rand -base64 741 > mongodb-keyfile

  2. linux 命令行: chmod 600 mongodb-keyfile

  3. https://docs.mongodb.org/manual/tutorial/configure-ssl/ mongos认证

  4. mongos.conf的配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    net:
    port: 20000
    bindIp: 127.0.0.1

    processManagement:
    pidFilePath: /data0/mongod/mongos.pid
    #fork: true

    #storage:
    # dbPath: /data0/mongod/data/mongos
    # directoryPerDB: true

    systemLog:
    destination: file
    path : /data0/mongod/log/mongos/mongodb.log
    logAppend: true

    sharding:
    configDB: configServer1:27000,configServer2:28000,configServer3:29000
    #replication:
    # replSetName: rs0
    # oplogSizeMB: 1000
    security:
    # authorization: enabled
    keyFile: mongodb-keyfile
    安全需要先注释,进入admin添加用户后在打开,和mongodb一样,这里不重复了
    运行:mongos -f mongos.conf
  5. 将所有的mongod.conf和config.conf 添加上

    1
    2
    3
    security:
    authorization: enabled
    keyFile: mongodb-keyfile
  6. mongos.conf只需要添加keyFile,不需要authorization。添加这个之前现在mongos无密码登陆创建用户先

  7. 进入mongos到admin

    1
    2
    3
    4
    5
    6
    sh.addShard("rs0/xxxxxxxx:27010,xxxxxxxxxxx:27030,xxxxxxxxxxxxxx:27030");
    需要在admin中添加。副本集也要在admin中添加,否则无法添加
    #指定uba分片生效
    db.runCommand( { enablesharding :"uba"});
    #指定数据库里需要分片的集合和片键
    db.runCommand( { shardcollection : "uba.table1",key : {id: 1} } )

phonegap/cordova

安装phonegap过程

安装node.js

1
前往https://nodejs.org/en/下载最新安装包,并将目录放置path中

安装phonegap

1
sudo npm install -g phonegap

cordova

1
2
sudo npm install -g cordova 
cordova是phonegap提交给apache开源代码的品牌,cordova是核心代码。phoengap如上层框架

创建app

1
2
3
4
5
6
7
8
9
10
11
12
phonegap create myapp
或者
cordova create myapp
cd myapp
cordova platform add browser/cordova platform add android 将项目加到哪个平台中去
cordova run android 运行该项目
cordova build -release发布生产版本
注:android需要添加path,
sudo vi /etc/profild.d/xxx.sh 当前环境变量名。
exprot ANDROID_HOME=/xxxxx/xxxx/sdk
exprot PATH=$ANDROID_HOME/platform-tools:$PATH
exprot PATH=$ANDROID_HOME/tools:$PATH

cordova常用命令

  1. cd myapp 进入工作目录
  2. cordova serve 或者phonegap serve 直接运行html代码
  3. cordova build 编译代码
  4. cordova plugin ls 当前使用的插件
  5. cordova rm * 移除插件
  6. cordova plugin add cordova-plugin-device 添加可以获取设备信息的插件
  7. http://cordova.apache.org/plugins/ 插件查找网站
  8. http://docs.phonegap.com/zh/edge/guide_cli_index.md.html#%E5%91%BD%E4%BB%A4%E8%A1%8C%E7%95%8C%E9%9D%A2 参考中文网
  9. http://cordova.apache.org/docs/zh/6.0.0/config_ref/index.html 最新的cordova中文文档
  10. http://cordova.apache.org/docs/en/latest/guide/overview/ 官方文档

app的在线更新code-push使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
使用code-push 微软提供插件,
安装命令:cordova plugin add cordova-plugin-code-push
安装后要使用code-push命令,需要另外安装:npm install -g code-push-cli,github地址:https://github.com/Microsoft/code-push/tree/master/cli
安装好code-push就要进行注册登陆,可以是使用github和microsoft账号,登陆会给出一个key进行登陆,使用命令:code-push register
code-push app add (you app name)添加一个app
code-push deployment ls (you app name) -k 查看你的app的key
code-push release myapp <path_to_your_app>/platforms/android/assets/www 0.0.1 --deploymentName Production/Staging 将自己的代码推上去( Production/Staging 2选1)
在app的config.xml添加一下内容
<platform name="android">
<preference name="CodePushDeploymentKey" value="你的app的key" />
</platform>
<platform name="ios">
<preference name="CodePushDeploymentKey" value="你的app的key" />
</platform>

InstallMode
IMMEDIATE: 立即更新app.
ON_NEXT_RESTART: 更新是下载,但没有立即安装。新的内容将在下一次应用程序启动时可用.
ON_NEXT_RESUME: 的更新下载,但不立即安装。新的内容将在下一次申请恢复或重新启动,无论事件发生的第一.

wechat微信插件使用

1
2
3
4
5
6
7
8
9
10
11
$scope.shares = function () {
// 发送到朋友圈
Wechat.share({
text: "豆豆你好",
scene: Wechat.Scene.TIMELINE // share to Timeline
}, function () {
alert("Success");
}, function (reason) {
alert("Failed: " + reason);
});
}

Cordova使用crosswalk更换内置的浏览器

crosswalk官方文档

1
2
1. cordova plugin add cordova-plugin-crosswalk-webview
2. cordova build android

使用百度云进行推送消息

  1. 参考资料百度云推送

ubuntu server修改键盘布局

ubuntu server修改键盘布局

1
2
3
4
5
6
7
8
9
10
11
12
方法1:

也许是以前的Ubuntu版本可以用这个命令改,现在的键盘布局被独立分开设置,于是我尝试了一下,发现正确的命令应该是:“ sudo dpkg-reconfigure keyboard-configuration ”,这个才对,使用这个命令后会出现非常人性化的伪图形界面供我们设置。


方法2:

另外,如果觉得不够“爽快”,想直接修改配置文件的同学们可以用一下这种方法:

sudo vim /etc/default/keyboard把里面XKBLAYOUT变量的值改为“us”,然后在终端(文字终端,不是虚拟终端,也就是Ctrl+Alt+F2或F3或F4.......)运行命令:setupcon。

最后为了让它立即生效,键入,sudo udevadm trigger --subsystem-match=input --action=change(sudo应该是有无都可以的),或者重启电脑即可。

shell脚本的一些语法

记录自己的一些使用shell脚本的数据

  1. 获取进程的pid号:ps -ef | grep tomcat/ | grep -v grep | awk ‘{print $2}’

    1
    2
    3
    这个脚本首先用ps -ef | grep tomcat-tuiguang/ 获得了进程信息中包含 tomcat-tuiguang/ 的进程信息,这样出来的结果中会包含grep本身,所以我们需要用 | grep -v grep 来排除grep本身,然后通过 awk '{print $2}'来打印出要找的进程。
    上述例子中只是将进程id号打印出来,当然也可以修改为将tomcat进程kill掉,如下脚本:
    ps -ef | grep tomcat-tuiguang/ | grep -v grep | awk '{print $2}' | sed -e "s/^/kill -9 /g" | sh -
  2. 获取脚本的全路径: DIR=”$( cd “$( dirname “${BASH_SOURCE[0]}” )” && pwd )”

  3. 获取当前系统时间: IME=”date +%Y-%m-%d.%H:%M:%S”

ssh转发

ssh转发使用代理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
http://www.inet.no/dante/

Dante -- Proxy communication solution

ssh的三个强大的端口转发命令:
QUOTE:
ssh -C -f -N -g -L listen_port:DST_Host:DST_port user@Tunnel_Host
ssh -C -f -N -g -R listen_port:DST_Host:DST_port user@Tunnel_Host
ssh -C -f -N -g -D listen_port user@Tunnel_Host

-f 参数:表示连接成功后,转入后台运行。
-N 参数:表示只连接远程主机,不打开远程shell;
-T 参数:表示不为这个连接分配TTY;

-p port Connect to this port. Server must be on the same port.
被登录的ssd服务器的sshd服务端口。

-L port:host:hostport
将本地机(客户机)的某个端口转发到远端指定机器的指定端口. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 同时远程主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有 root 才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport

-R port:host:hostport
将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口. 工作原理是这样的, 远程主机上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转向出去, 同时本地主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有用 root 登录远程主机才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport

-D port
指定一个本地机器 “动态的'’ 应用程序端口转发. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 根据应用程序的协议可以判断出远程主机将和哪里连接. 目前支持 SOCKS4 协议, 将充当 SOCKS4 服务器. 只有 root 才能转发特权端口. 可以在配置文件中指定动态端口的转发.

-C Enable compression.
压缩数据传输。

-N Do not execute a shell or command.
不执行脚本或命令,通常与-f连用。

-g Allow remote hosts to connect to forwarded ports.
在-L/-R/-D参数中,允许远程主机连接到建立的转发的端口,如果不加这个参数,只允许本地主机建立连接



Linux命令行下SSH端口转发设定笔记(转)

原文:http://be-evil.org/post-167.html

在Windows下面我们可以很方便的使用putty等ssh工具来实现将服务器上的端口映射到本机端口来安全管理服务器上的软件或者服务 那么我们换到在Liunx下我们应该怎么做呢?

ssh -L 本地端口:服务器地址:服务器端口 用户名@服务器地址 -N

参数详解:

-L 端口映射参数 本地端口 - 这个任意即可,只要本机没有其他的程序占用这个端口就行

服务器地址 - 你需要映射的服务器地址(名称/ip)

服务器端口 - 远程的服务器端口

-N - 不使用Shell窗口,纯做转发的时候用,如果你在映射完成后继续在服务器上输入命令,去掉这个参数即可

例子A:我们想远程管理服务器上的MySQL,那么使用下面命令

ssh -L 3306:127.0.0.1:3306 user@emlog-vps -N
运行这个命令之后,ssh将会自动将服务器的3306映射到本机的3306端口,我们就可以使用任意MySQL客户端连接 localhost:3306即可访问到服务器上的MySQL了。

例子B:一次同时映射多个端口

ssh -L 8888:www.host.com:80-L 110:mail.host.com:110 \ 25:mail.host.com:25 user@host -N
这个命令将自动把服务器的80,110,25端口映射到本机的8888,110和25端口 以上命令在ubuntu 9.10 上测试通过...

样例

  • 样例内网穿透:ssh -CfNg -R 0.0.0.0:8080:127.0.0.1:8080 root@ip
    1
    2
    3
    4
    5
    说明:A有公网IP. B是内网.执行上面的语句,访问外网8080端口时候,会穿透到内网上服务器的8080端口.
    备注:如果发现A服务器监听的是本地地址,只允许本地开放.那么需要修改A机器的ssh配置.
    1. vi /etc/ssh/sshd_config
    2. 打开 GatewayPort(删除前面的 # 号,将其设置为 yes)
    3. systemctl restart sshd

ssh对方机子非22端口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 windows路径:   C:\Users\Administrator\.ssh

linux路径: /home/administrator/.ssh

如果该路径下没有config文件,则创建一个。

config中添加如下内容:

如是以域名访问的则添加如下内容:(注意修改xxx为你的远程仓库的名称)

Host xxx
HostName xxx.com
Port 3333


如是以ip访问的,则添加如下内容:(注意修改ip为你的远程仓库ip)

Host "211.111.xx.xxx"
Port 3333


注意如果 git 是 ssh 方式免密认证方式登录的话,且你的私钥文件名字不是 id_rsa

则还需要在 config 文件中填加:

IdentityFile ~/.ssh/<你的密钥名>

config中还可以指定User,如

User "git"