分类 默认分类 下的文章

客户端配置

生成密钥文件

使用ssh-keygen命令在客户端电脑上生成公钥和私钥,根据提示操作,保存到$HOME/.ssh/目录, 例如生成的文件为:xxx_rsa, xxx_rsa.pub

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

<br/>

配置登录的key

编辑~/.ssh/config, 按如下格式编辑

Host <hostname>
    Hostname <hostname>
    User <username>
    Port <port>
    IdentityFile ~/.ssh/xxx_rsa

<br/>

SSH Key认证
ssh <hostname>

<br/>

服务端配置

先以Root用户登录
在authorized_keys文件尾,增加SSH KEY

vi ~/.ssh/authorized_keys

编辑ssh配置文件

vi /etc/ssh/sshd_config

内容修改为:

RSAAuthentication yes
StrictModes no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no

重启SSH

systemctl restart sshd.service

重启好后,就可以使用上面的ssh <hostname>登录服务器了.

Luajit 是针对Lua开发的一款即时编译器, 提供了FFI库, 可以方便使用C接口的动态库.

先准备一个C语言的库
mytest.c

int add(int x, int y)
{
    return x + y;
}

编译动态库文件libmytest.so

g++ mylib.c --shared -o libmytest.so

Lua文件test.lua

local ffi = require("ffi")
local mytest = ffi.load('mytest')

ffi.cdef[[
int add(int x, int y);
]]

local result = mytest.add(1, 2)

print(result)

执行test.lua

luajit test.lua

如果出现动态库找不到的情况下,可以执行下面的命令:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<动态库所有目录>

最近一个C项目需要调用一个C++的库,将调用过程简化一下写出来.

在c的代码main.c调用duck.cpp里的say()方法, 代码如下:

duck.h

#ifndef _DUCK_H_
#define _DUCK_H_

class Duck{
    public:
        void say();
};

#endif

duck.cpp

#include "duck.h"
#include <iostream>

using namespace std;

void Duck::say(){
    cout << "ga~ga~ga~" << endl;
}

animal.h

#ifndef _ANIMAL_H_
#define _ANIMAL_H_

#ifdef __cplusplus

#include "duck.h"

Duck duck;

extern "C" {
    void duckSay();
}

#endif
#endif

animal.cpp

#include "animal.h"
#include "duck.h"

void duckSay(){
    duck.say();
}

main.c

#include "animal.h"

void duckSay();

int main(void){
    duckSay();
}

编译

g++ -shared -o libduck.so animal.cpp duck.cpp 

gcc main.c ./libduck.so -o duck

./duck