在Debian 7/Ubuntu 13.10 上使用隧道封装SSH连接

隧道 被设计用于远端客户端和本地(可通过inetd启动)或远端服务器间的SSL加密封装。它可以用于为inetd进程增加SSL功能,像POP2(译注:厄,POP2这个服务还有人用么?),POP3和IMAP服务而不必改变程序代码。隧道使用OpenSSL库用于加密,因此它支持任何被编译进库的加密算法。简而言之,隧道可以使任何一个不安全的端口变得安全加密。

在本篇中,我会描述如何通过SSL水稻封装SSH。这个步骤非常简单。你需要在你的客户端PC和远程PC都已经安装运行了sshd。

我正在使用下面提到的两个系统。

远程系统:

操作系统: Debian 7
IP 地址: 192.168.1.200/24

客户端(本地) 系统:

操作系统: Ubuntu 13.04 desktop
IP 地址: 192.168.1.100/24

配置远程系统

让我们在远程Debian 7服务器上安装stunnel包。

# apt-get install stunnel4

现在让我们像下面那样创建一个SSL证书。

# openssl genrsa 1024 > stunnel.key

示例输出:

Generating RSA private key, 1024 bit long modulus
............................................++++++
...................++++++
e is 65537 (0x10001)

# openssl req -new -key stunnel.key -x509 -days 1000 -out stunnel.crt

你会被询问若干个问题如国家、州、公司细节等。

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:IN
State or Province Name (full name) [Some-State]:Tamilnadu
Locality Name (eg, city) []:Erode
Organization Name (eg, company) [Internet Widgits Pty Ltd]:unixmen
Organizational Unit Name (eg, section) []:Technical
Common Name (e.g. server FQDN or YOUR name) []:server.unixmen.com
Email Address []:sk@unixmen.com

# cat stunnel.crt stunnel.key > stunnel.pem
# mv stunnel.pem /etc/stunnel/

现在我们需要配置stunnel来将 443(https)隧道到22(ssh)。这可以通过在/etc/stunnel/目录下创建stunnel.conf文件来实现:

 # vi /etc/stunnel/stunnel.conf

并加入下面的行:

pid = /var/run/stunnel.pid
cert = /etc/stunnel/stunnel.pem
[ssh]
accept = 192.168.1.200:443
connect = 127.0.0.1:22

上面的几行说明了stunnel在哪里寻找证书文件和哪里接收和转发ssh链接。在本例中,stunnel会接收来自443端口的流量并会转发给22端口。

保存并关闭文件。

现在让我们启用stunnel服务。要这么做,编辑文件 /etc/default/stunnel4:

# vi /etc/default/stunnel4

改变行从 ENABLED = 0 到 1。

# /etc/default/stunnel
# Julien LEMOINE <speedblue@debian.org>
# September 2003

# Change to one to enable stunnel automatic startup
ENABLED=1
FILES="/etc/stunnel/*.conf"
OPTIONS=""

# Change to one to enable ppp restart scripts
PPP_RESTART=0

接着使用命令启用stunnel服务:

# service stunnel4 start

配置本地系统

用这个命令安装stunnel:

$ sudo apt-get install stunnel4

我们需要远程系统上相同的证书文件(stunnel.pem)。复制远程系统上的 stunnel.pem文件到我们本地系统中并在相同的位置保存(也就是 /etc/stunnel)。

在 /etc/stunnel/目录下创建新的文件stunnel.conf:

$ sudo vi /etc/stunnel/stunnel.conf

加入下面的行:

pid = /var/run/stunnel.pid
cert = /etc/stunnel/stunnel.pem
client=yes
[ssh]
accept=443
connect=192.168.1.200:443

保存并关闭文件。这里的192.168.1.200是我们的远程系统IP。

现在让我们启用stunnel服务。要这么做,编辑文件/etc/default/stunnel4:

$ sudo vi /etc/default/stunnel4

改变行从 ENABLED = 0 到 1.

# /etc/default/stunnel
# Julien LEMOINE <speedblue@debian.org>
# September 2003

# Change to one to enable stunnel automatic startup
ENABLED=1
FILES="/etc/stunnel/*.conf"
OPTIONS=""

# Change to one to enable ppp restart scripts
PPP_RESTART=0

接着使用命令启用stunnel服务:

$ sudo service stunnel4 start

测试SSH连接

现在这样已经很好了,你可以使用命令连接到你的远程机器上了:

$ ssh sk@localhost -v -p 443

示例输出:

OpenSSH_6.1p1 Debian-4, OpenSSL 1.0.1c 10 May 2012
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to localhost [127.0.0.1] port 443.
debug1: Connection established.
debug1: identity file /home/sk/.ssh/id_rsa type -1
debug1: identity file /home/sk/.ssh/id_rsa-cert type -1
debug1: identity file /home/sk/.ssh/id_dsa type -1
debug1: identity file /home/sk/.ssh/id_dsa-cert type -1
debug1: identity file /home/sk/.ssh/id_ecdsa type -1
debug1: identity file /home/sk/.ssh/id_ecdsa-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_6.0p1 Debian-4
debug1: match: OpenSSH_6.0p1 Debian-4 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.1p1 Debian-4
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: sending SSH2_MSG_KEX_ECDH_INIT
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ECDSA 78:05:ba:1b:73:02:75:86:10:33:8c:0f:21:61:d4:de
debug1: Host '[localhost]:443' is known and matches the ECDSA host key.
debug1: Found key in /home/sk/.ssh/known_hosts:12
debug1: ssh_ecdsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Trying private key: /home/sk/.ssh/id_rsa
debug1: Trying private key: /home/sk/.ssh/id_dsa
debug1: Trying private key: /home/sk/.ssh/id_ecdsa
debug1: Next authentication method: password
sk@localhost's password: #   ## Enter your remote system user password
debug1: Authentication succeeded (password).
Authenticated to localhost ([127.0.0.1]:443).
debug1: channel 0: new [client-session]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: Sending environment.
debug1: Sending env LC_PAPER = en_IN.UTF-8
debug1: Sending env LC_ADDRESS = en_IN.UTF-8
debug1: Sending env LC_MONETARY = en_IN.UTF-8
debug1: Sending env LC_NUMERIC = en_IN.UTF-8
debug1: Sending env LC_TELEPHONE = en_IN.UTF-8
debug1: Sending env LC_IDENTIFICATION = en_IN.UTF-8
debug1: Sending env LANG = en_US.UTF-8
debug1: Sending env LC_MEASUREMENT = en_IN.UTF-8
debug1: Sending env LC_TIME = en_IN.UTF-8
debug1: Sending env LC_NAME = en_IN.UTF-8
Linux server 3.2.0-4-486 #1 Debian 3.2.51-1 i686

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
You have new mail.
Last login: Mon Dec 30 15:12:22 2013 from localhost
sk@server:~$

或者你可以简单地使用下面的命令:

$ ssh -p 443 sk@localhost

示例输出:

sk@localhost's password:
Linux server 3.2.0-4-486 #1 Debian 3.2.51-1 i686

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
You have new mail.
Last login: Mon Dec 30 15:22:08 2013 from localhost
sk@server:~$

现在你可以用ssh连接到你的远程机器上了,但是所有的流量通过SSL隧道。

原文发布时间为:2014-01-19

本文来自合作伙伴“Linux中国”

时间: 2024-08-07 03:17:20

在Debian 7/Ubuntu 13.10 上使用隧道封装SSH连接的相关文章

如何在Ubuntu 13.04和13.10上安装iOS 7的图标

这个简单的教程将指导你如何在你的Ubuntu 12.04.13.04和13.10上安装苹果iOS 7操作系统的所有图标.   上面是效果图,安装的图标虽然并不多,但是对于外观的改进来讲却是重大提高.如果Canonical没有在每一个发行版中使用差异甚小的同类图标,那你就不太容易分辨出Ubuntu. 以前在Ubuntu安装主题.图标甚至是鼠标光标,那叫一个麻烦,但是近几年这事变得容易多了.想要安装新的图标,只需要输入几条命令就行. 在开始之前,请注意一下.本文使用的PPA(Personal Pac

如何在Ubuntu 13.10中升级GNOME 到 3.10?

Ubuntu 13.10 中配备了GNOME 3.8桌面. 尽管它相比Unity是一个可靠稳定以及有特色的替代品,但这个版本还是过时了. GNOME桌面的最新版本在2013年9月发布,随之而来的是一系列改进的功能.应用程序和可用性的调整.从对高分辨率屏幕的支持到客户端应用窗口上的美化,GNOME 3.10无疑是一个引人注目的升级版本. 好消息是:假设你正在运行Ubuntu 13.10,拥有不错的网络操作和命令行水平,那么你无需继续使用一个过时版本的GNOME. 在Ubuntu 13.10 上如何

在 Ubuntu 14.10/14.04/13.10 上安装 LEMP 服务和 phpMyAdmin

在 Ubuntu 14.10/14.04/13.10 上安装 LEMP 服务和 phpMyAdmin LEMP是一个操作系统和几个开源软件包的合称.缩写LEMP来自 Linux,Nginx(发音是 engine-x)HTTP服务器, MySQL数据库,和 PHP/ Perl/ Python的首字母. 在这篇教程里,让我们看一下如何在 Ubuntu 14.10 上安装 Nginx,MySQL 或 MariaDB,PHP 和 phpMyAdmin. 安装Nginx Nginx (发音是engine-

在Ubuntu 13.10或者13.04上安装Rhythmbox 3.0

Rhythmbox 3.0已经发布了超过一个月了,这个版本改进了用户界面,使用Python 3来支持插件.很可惜,新版本并没有集成到13.10里面,但是你可以使用PPA来安装它(Ubuntu 13.04也支持).   Rhythmox 3.0的新功能: 插件现在使用Python 3; 新的任务进度显示在曲目列表的下方(可以供很多东西使用包括包括轨道更换和导入作业等): 支持作曲家标签: 重新制作了播放控制栏: 使用象征性的图片重新设计了源列表: 所有东西都更好的优化过: 通过不同的公开属性将CB

Ubuntu 13.10安装后你要做的8件事

Ubuntu 13.10 已经发布了,对于那些打算安装"纯净版"的用户,安装完系统后你可以考虑下面的8件事.   1. 安装一些绚丽的小零件   系统负载 是系统监控工具GNOME里的一个小应用.它能在面板上展示出CPU.内存.网络使用.硬盘I/O等信息.点击下面的按钮从Ubuntu软件中心安装.   或者通过命令行进行安装: sudo apt-get install indicator-multiload   CPU频率是一款等效于"GNOME-CPU调频"的应用

如何在 Ubuntu 13.10 中安装 Gnome 3.10

厌倦 Unity 了吗?或者说就是不喜欢它?为何不试试在 Ubuntu 13.10 中安装 Gnome 3.10?安装一个新的桌面环境是为数不多的安装Ubuntu 13.10后要做的事之一,如果你想要尝试一下.在这篇快速教程中我们将会分享如何在 Ubuntu 13.10 中安装 Gnome 3.10. 在 Ubuntu 13.10 中安装 Gnome 3.10: 我们将花费一些时间来使用几个 PPA 安装 Gnome 3.10 和分配升级.我假设你网速不错,如果不是的话,你可以使用一些小技巧来提

Ubuntu 13.10将默认用Chromium代替Firefox

Canonicalhttp://www.aliyun.com/zixun/aggregation/7155.html">开发人员近日讨论确定使用Google Chromium(Chrome浏览器的开源版)替代Mozilla Firefox作为Ubuntu 13.10新的默认浏览器,不过Ubuntu 13.10中并不会删除Firefox,只是Firefox不再作为Ubuntu桌面系统的默认浏览器. Canonical考虑切换到Chromium的重要理由是 Ubuntu Touch及其Web应

禁用Ubuntu 13.10的Amazon及远程内容获取

Ubuntu 13.10已经发布一段时间了,是时候坐下来配置一下系统来满足你的要求.Ubuntu 13.10配备了很多东西,当你安装或者升级时其实有些并不是你所需要的. 举个例子,当你安装或者升级到Ubuntu 13.10时,会自动启用Amazon和一些其他商业购物网站的功能.当你打开Unity Dash时这些Lens就会显示.当你在Dash处执行搜索时,类似Amazon的远程数据源中符合你搜索内容的选项也会发送过来. 这些由Canonical公司提供的新增特性可能对某些人有用,但是对另一些用户

一步步安装Ubuntu 13.10服务版

如你所见,这是一篇关于Ubuntu 13.10服务版的安装的指南. 下载最新的版本Ubuntu 13.10 服务版,然后用刻录好的Ubuntu 13.10服务版光盘引导你的服务器,你将会看到类似下面的显示. 首先选择您的语言:(建议使用英文) 点击安装Ubuntu服务版: 选择安装过程中所使用的语言: 选择你的国家(译注:用于决定时区,请选择中国,使用+8时区): 配置区域设置:(译注:对于服务器版本,我们建议一律采用英文的locale-- en_US.UTF-8,当然,你可以增加中文字体包,但