通过ssh通道加密通信数据

30 篇文章 2 订阅
14 篇文章 0 订阅

ssh数据加密是非常棒的,先来个如何进行加密的示意图。

图.1



开启ssh服务(ubuntu):

#/etc/init.d/ssh start

查看ssh 服务状态:

图.2


执行:

#ssh -L 6000:127.0.0.1:8888 -N 127.0.0.1    // 注意,这里第一个ip是回环地址,第二个应该是远程的地址,这里用于测试。6000是sshPort,8888是serPort
#netstat -tnlp | grep ssh


图.3


可以看到,ssh客户端开启了一个监听,监听的端口号是6000,那么接下来我们的client只需要去连接6000端口了。

那为什么有个37344 <--> 22的连接呢?那是因为ssh客户端创建出一个进程或者线程和sshd连接,给第三方应用通信,父进程依然在等待新的第三方程序的请求


下面是server 和 client 的测试代码:

/*
Server.c
*/
#include <stdio.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <string.h>

int main(int argc, char *argv[])
{
	int sock = socket(AF_INET, SOCK_STREAM, 0);
	if (sock < 0)
		write(STDERR_FILENO, "socket error", 11);

	struct sockaddr_in addr;
	memset(&addr, 0, sizeof(addr));
	addr.sin_family = AF_INET;
	addr.sin_port = htons(8888);
	addr.sin_addr.s_addr = inet_addr("127.0.0.1");

	bind(sock, (struct sockaddr *)&addr, sizeof(addr));

	listen(sock, 32767);

	int connfd = accept(sock, NULL, NULL);

	write(connfd, "You connect success.\n", 21);


	sleep(10000);

	close(connfd);
	close(sock);
	

	return 0;
}
/*
Client.c
*/
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <stdio.h>
#include <string.h>
#include <arpa/inet.h>

int main(int argc, char *argv[])
{
	int sock = socket(AF_INET, SOCK_STREAM, 0);

	struct sockaddr_in addr;
	memset(&addr, 0, sizeof(addr));
	addr.sin_family = AF_INET;
	addr.sin_port = htons(6000);
	addr.sin_addr.s_addr = inet_addr("127.0.0.1");

	connect(sock, (struct sockaddr *)&addr, sizeof(addr));

	char buf[512];
	memset(buf, 0, sizeof(buf));
	//printf("sizeof(buf):%d\n", sizeof(buf));

	read(sock, buf, 512);

	write(STDOUT_FILENO, buf, strlen(buf));

	sleep(10000);

	close(sock);

	return 0;
}

在开启server 和 client之前,我们先用tcpdump监听端口,这里我们应该选择37344端口监听!同时选择的是回环设备。

注意,不是8888 或者 6000端口,为什么?因为在连接37344 <--> 22之间的数据才是加密的(看图1理解)。

图.4

开启server 和 client.

#./server
#./client

图.5


可以看到客户端返回了正确数据,再来看看tcpdump的输出。

18:34:15.538916 IP 127.0.0.1.37344 > 127.0.0.1.22: Flags [P.], seq 3506275179:3506275271, ack 3174401501, win 386, options [nop,nop,TS val 3634369 ecr 3502811], length 92
	0x0000:  4510 0090 160a 4000 4006 264c 7f00 0001  E.....@.@.&L....
	0x0010:  7f00 0001 91e0 0016 d0fd 836b bd35 85dd  ...........k.5..
	0x0020:  8018 0182 fe84 0000 0101 080a 0037 74c1  .............7t.
	0x0030:  0035 72db 97e4 2ffd 23df c0c5 eeb7 bbb4  .5r.../.#.......
	0x0040:  08de fa22 eb43 2d58 6074 1e51 cb07 b193  ...".C-X`t.Q....
	0x0050:  0d93 5f38 c3b3 9846 a859 0c14 1b3d 9884  .._8...F.Y...=..
	0x0060:  b1f5 ce8a 89c1 2567 d17e 58ae 3f54 d043  ......%g.~X.?T.C
	0x0070:  bccf e4b4 1f13 6717 c45f d0ac 7075 3d0e  ......g.._..pu=.
	0x0080:  d387 c803 3ca1 f939 eabc f10c c01d 672c  ....<..9......g,
18:34:15.538954 IP 127.0.0.1.22 > 127.0.0.1.37344: Flags [.], ack 92, win 1365, options [nop,nop,TS val 3634369 ecr 3634369], length 0
	0x0000:  4500 0034 1325 4000 4006 299d 7f00 0001  E..4.%@.@.).....
	0x0010:  7f00 0001 0016 91e0 bd35 85dd d0fd 83c7  .........5......
	0x0020:  8010 0555 fe28 0000 0101 080a 0037 74c1  ...U.(.......7t.
	0x0030:  0037 74c1                                .7t.
18:34:15.539218 IP 127.0.0.1.22 > 127.0.0.1.37344: Flags [P.], seq 1:45, ack 92, win 1365, options [nop,nop,TS val 3634369 ecr 3634369], length 44
	0x0000:  4500 0060 1326 4000 4006 2970 7f00 0001  E..`.&@.@.)p....
	0x0010:  7f00 0001 0016 91e0 bd35 85dd d0fd 83c7  .........5......
	0x0020:  8018 0555 fe54 0000 0101 080a 0037 74c1  ...U.T.......7t.
	0x0030:  0037 74c1 ba76 018f 3cfd 88c1 79e0 3756  .7t..v..<...y.7V
	0x0040:  473b 6839 a577 62e1 7a67 6e4b 03cb 3a94  G;h9.wb.zgnK..:.
	0x0050:  6c5c e89f 7bbc 734a bc7e b343 1e9d d063  l\..{.sJ.~.C...c
18:34:15.539230 IP 127.0.0.1.37344 > 127.0.0.1.22: Flags [.], ack 45, win 386, options [nop,nop,TS val 3634369 ecr 3634369], length 0
	0x0000:  4510 0034 160b 4000 4006 26a7 7f00 0001  <span style="color:#CC0000;">E..4..@.@.&.....</span>
	0x0010:  7f00 0001 91e0 0016 d0fd 83c7 bd35 8609  <span style="color:#CC0000;">.............5..</span>
	0x0020:  8010 0182 fe28 0000 0101 080a 0037 74c1  <span style="color:#CC0000;">.....(.......7t.</span>
	0x0030:  0037 74c1                                <span style="color:#CC0000;">.7t.</span>

其中,前三个捕获是tcp的三次握手过程。

最后一次是传输的数据,如果不采用ssh 加密,那么可以看到红色部分是明文You connect success.(上面的<span style .. . . . > </span>部分)

或者用tcpdump监听8888和6000均是明文。


SSH加密到此结束。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值