ssh.docx

上传人:b****6 文档编号:3866789 上传时间:2022-11-26 格式:DOCX 页数:11 大小:24.85KB
下载 相关 举报
ssh.docx_第1页
第1页 / 共11页
ssh.docx_第2页
第2页 / 共11页
ssh.docx_第3页
第3页 / 共11页
ssh.docx_第4页
第4页 / 共11页
ssh.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

ssh.docx

《ssh.docx》由会员分享,可在线阅读,更多相关《ssh.docx(11页珍藏版)》请在冰豆网上搜索。

ssh.docx

ssh

SSH打造Windows2000和FreeBSD的安全通道

 

许多网络程序,如Telnet、RSH、Rlogin,FTP都是用明文传送口令和信息的,所以就可利用任何连接到网络上的计算机监听这些程序和服务器之间的通信,并获取口令和信息。

而Telnet是我们日常生活中必不可少的服务,它这么不安全,怎么办?

SSH可以替代它。

本文将介绍使用SSH2其中两种认证模式:

Password和Publickey来实现Windows2000和FreeBSD之间的安全通道。

 

小知识:

SSH是英文SecureShell的简写形式。

通过使用SSH,可以把Telnet的会话进行加密,也可以为FTP等网络程序提供一个安全通道,不用担心被别有用心的人Sniffer,并且SSH的数据传输是经过压缩的,这样也能够加快传输速率。

SSH的当前协议版本号为2,一共有六种认证模式,分别是Password、Publickey、Rhosts、RhostsRSA、RSA和ChallengeResponse。

先介绍一下实验的环境:

Windows2000server,IP:

192.168.0.1;FreeBSD4.9Release,IP:

192.168.0.3,它们之间用10M以太网连接。

准备:

先在Windows2000上下载SSHSecureShell软件,搜索引擎能够找到许多下载的链接,这里就不给出了。

该软件有两个组件,SSHSecureShellclient和SSHSecureFileTransferClient,本文都会用到。

Password模式的实现

在Windows2000下打开SSHSecureShellclient,使用Password模式相当简单,FreeBSD模式是开启SSH2的,故只要点击QuickConnection按钮。

输入目标IP,用户名以及认证模式,这里填的是“von”这个用户,隶属于Wheel组。

在下拉列表中选Password,目标端口默认为22,不用去改。

填完之后点Connect,会要求输入密码。

小提示:

SSH默认是不允许ROOT帐户直接进行远程登陆的,如果一定要使用ROOT登陆,可以将FreeBSD机的/etc/ssh/sshd_config文件里的PermitROOTLogin设置为yes。

一般的方法是用Wheel组里的用户登陆,成功之后再SU成ROOT。

输入正确的用户密码,OK,连接。

看,远程登陆成功。

Password模式的优点是简单,但是它不够安全。

有的人说因为它是明文传输的,其实这种说法是不正确的。

SSH不管是Password还是Publickey,都是加密的,都无法对其进行嗅探。

Password的不安全因素在于:

如果有人知道你的口令,那它就可以在任何一台连上网的计算机上冒充你进行登陆。

要避免这样的安全隐患,请在FreeBSD机的/etc/ssh/sshd_config文件下将PasswordAuthentication设置为no,这样所有的登陆都必须使用Publickey验证。

Publickey的实现

顾名思义,公钥私钥模式。

打开SSHSecureShellclient,点选Edit菜单下的Settings项,点左边菜单的UserKeys,再点击GenerateNewKeypair来创建新的密钥对,点下一步后,这里就以1024位的DSA算法为例,按“下一步”,等待数秒后,填写密钥的名称,所属团体以及片语,一会儿我们通过Private/Publickey模式连接的时候需要输入片语。

到这里,密钥对已经生成了。

默认放在C:

\DocumentsandSettings\Administrator\ApplicationData\SSH\UserKeys目录下。

现在我们要使用SSHSecureFileTransferClient了。

用它来替代不安全的FTP将公钥传输到FreeBSD上的指定目录中去。

小提示:

片语最好与FreeBSD下的用户密码不同,这样即使他人知道你FreeBSD的用户密码,且使用这台拥有密钥的计算机进行远程登陆,也无法成功登陆,因为他并不知道你的片语。

现在由于Publickey还没实现,暂且使用Password模式来传输。

同样会弹出个密码框,输入正确的密码,就连上了。

选取Operation菜单的Upload项,将C:

\DocumentsandSettings\Administrator\ApplicationData\SSH\UserKeys\win.pub,也就是公钥,传上去,默认放在Von用户的主目录/home/von下。

FreeBSD下的设置

1.使用帐户von登陆系统,并在/home/von下新建.ssh目录(看仔细,“ssh”前有个点):

$cd/home/von

$mkdir.ssh

2.将win.pub移动到.ssh目录下:

$mvwin.pub.ssh/

3.在.ssh目录下执行:

$ssh-keygen-X-fwin.pub>>authorized_keys#authorized_keys文件会自动建立

现在可以使用Publickey模式进行远程登陆了,打开SSHSecureShellclient,点Quick。

在Authentication的下拉列表中选择PublicKey,按Connect,在Passphrase中输入刚才填写的片语,OK,连接成功。

至此,安全,快速的SSH通道建立了,以后再也不用担心数据传输会出现问题了

 

LeadBBS.COM极速ASP论坛>>LeadBBS官方论坛>>技术与交流>>PHP学习>>【资料】SSH入门教程

【资料】SSH入门教程Xinsoft,2003-12-1902:

32:

36

SSH使用指南

介绍SSH

什么是SSH?

传统的网络服务程序,如:

ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。

而且,这些服务程序的安全验证方式也是有其弱点的,就是很容易受到“中间人”(man-in-the-middle)这种方式的攻击。

所谓“中间人”的攻击方式,就是“中间人”冒充真正的服务器接收你的传给服务器的数据,然后再冒充你把数据传给真正的服务器。

服务器和你之间的数据传送被“中间人”一转手做了手脚之后,就会出现很严重的问题。

SSH的英文全称是SecureSHell。

通过使用SSH,你可以把所有传输的数据进行加密,这样“中间人”这种攻击方式就不可能实现了,而且也能够防止DNS和IP欺骗。

还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。

SSH有很多功能,它既可以代替telnet,又可以为ftp、pop、甚至ppp提供一个安全的“通道”。

最初SSH是由芬兰的一家公司开发的。

但是因为受版权和加密算法的限制,现在很多人都转而使用OpenSSH。

OpenSSH是SSH的替代软件,而且是免费的,可以预计将来会有越来越多的人使用它而不是SSH。

SSH是由客户端和服务端的软件组成的,有两个不兼容的版本分别是:

1.x和2.x。

用SSH2.x的客户程序是不能连接到SSH1.x的服务程序上去的。

OpenSSH2.x同时支持SSH1.x和2.x。

SSH的安全验证是如何工作的

从客户端来看,SSH提供两种级别的安全验证。

第一种级别(基于口令的安全验证)只要你知道自己帐号和口令,就可以登录到远程主机。

所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。

可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。

第二种级别(基于密匙的安全验证)需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。

如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。

服务器收到请求之后,先在你在该服务器的家目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。

如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。

客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。

用这种方式,你必须知道自己密匙的口令。

但是,与第一种级别相比,第二种级别不需要在网络上传送口令。

第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。

但是整个登录的过程可能需要10秒。

安装并测试OpenSSH

因为受到美国法律的限制,在很多Linux的发行版中都没有包括OpenSSH。

但是,可以从网络上下载并安装OpenSSH(有关OpenSSH的安装和配置请参考:

安装完OpenSSH之后,用下面命令测试一下:

ssh-l[youraccountnameontheremotehost][addressoftheremotehost]

如果OpenSSH工作正常,你会看到下面的提示信息:

Theauthenticityofhost[hostname]can'tbeestablished.

Keyfingerprintis10245f:

a0:

0b:

65:

d3:

82:

df:

ab:

44:

62:

6d:

98:

9c:

fe:

e9:

52.

Areyousureyouwanttocontinueconnecting(yes/no)?

OpenSSH告诉你它不知道这台主机,但是你不用担心这个问题,因为你是第一次登录这台主机。

键入“yes”。

这将把这台主机的“识别标记”加到“~/.ssh/know_hosts”文件中。

第二次访问这台主机的时候就不会再显示这条提示信息了。

然后,SSH提示你输入远程主机上你的帐号的口令。

输入完口令之后,就建立了SSH连接,这之后就可以象使用telnet那样使用SSH了。

SSH的密匙

生成你自己的密匙对

生成并分发你自己的密匙有两个好处:

1)可以防止“中间人”这种攻击方式

2)可以只用一个口令就登录到所有你想登录的服务器上

用下面的命令可以生成密匙:

ssh-keygen

如果远程主机使用的是SSH2.x就要用这个命令:

ssh-keygen–d

在同一台主机上同时有SSH1和SSH2的密匙是没有问题的,因为密匙是存成不同的文件的。

ssh-keygen命令运行之后会显示下面的信息:

GeneratingRSAkeys:

............................ooooooO......ooooooO

Keygenerationcomplete.

Enterfileinwhichtosavethekey(/home/[user]/.ssh/identity):

[按下ENTER就行了]

Createddirectory'/home/[user]/.ssh'.

Enterpassphrase(emptyfornopassphrase):

[输入的口令不会显示在屏幕上]

Entersamepassphraseagain:

[重新输入一遍口令,如果忘记了口令就只能重新生成一次密匙了]

Youridentificationhasbeensavedin/home/[user]/.ssh/identity.

[这是你的私人密匙]

Yourpublickeyhasbeensavedin/home/[user]/.ssh/identity.pub.

Thekeyfingerprintis:

2a:

dc:

71:

2f:

27:

84:

a2:

e4:

a1:

1e:

a9:

63:

e2:

fa:

a5:

89[user]@[localmachine]

“ssh-keygen–d”做的是几乎同样的事,但是把一对密匙存为(默认情况下)“/home/[user]/.ssh/id_dsa”(私人密匙)和“/home/[user]/.ssh/id_dsa.pub”(公用密匙)。

现在你有一对密匙了:

公用密匙要分发到所有你想用ssh登录的远程主机上去;私人密匙要好好地保管防止别人知道你的私人密匙。

用“ls–l~/.ssh/identity”或“ls–l~/.ssh/id_dsa”所显示的文件的访问权限必须是“-rw-------”。

如果你怀疑自己的密匙已经被别人知道了,不要迟疑马上生成一对新的密匙。

当然,你还要重新分发一次公用密匙。

分发公用密匙

在每一个你需要用SSH连接的远程服务器上,你要在自己的家目录下创建一个“.ssh”的子目录,把你的公用密匙“identity.pub”拷贝到这个目录下并把它重命名为“authorized_keys”。

然后执行:

chmod644.ssh/authorized_keys

这一步是必不可少的。

如果除了你之外别人对“authorized_keys”文件也有写的权限,SSH就不会工作。

如果你想从不同的计算机登录到远程主机,“authorized_keys”文件也可以有多个公用密匙。

在这种情况下,必须在新的计算机上重新生成一对密匙,然后把生成的“identify.pub”文件拷贝并粘贴到远程主机的“authorized_keys”文件里。

当然在新的计算机上你必须有一个帐号,而且密匙是用口令保护的。

有一点很重要,就是当你取消了这个帐号之后,别忘了把这一对密匙删掉。

配置SSH

配置客户端的软件

OpenSSH有三种配置方式:

命令行参数、用户配置文件和系统级的配置文件(“/etc/ssh/ssh_config”)。

命令行参数优先于配置文件,用户配置文件优先于系统配置文件。

所有的命令行的参数都能在配置文件中设置。

因为在安装的时候没有默认的用户配置文件,所以要把“/etc/ssh/ssh_config”拷贝并重新命名为“~/.ssh/config”。

标准的配置文件大概是这样的:

[lotsofexplanationsandpossibleoptionslisted]

#Beparanoidbydefault

Host*

ForwardAgentno

ForwardX11no

FallBackToRshno

还有很多选项的设置可以用“manssh”查看“CONFIGURATIONFILES”这一章。

配置文件是按顺序读取的。

先设置的选项先生效。

假定你在上有一个名为“bilbo”的帐号。

而且你要把“ssh-agent”和“ssh-add”结合起来使用并且使用数据压缩来加快传输速度。

因为主机名太长了,你懒得输入这么长的名字,用“fbc”作为“”的简称。

你的配置文件可以是这样的:

Host*fbc

HostName

Userbilbo

ForwardAgentyes

Compressionyes

#Beparanoidbydefault

Host*

ForwardAgentno

ForwardX11no

FallBackToRshno

你输入“sshfbc”之后,SSH会自动地从配置文件中找到主机的全名,用你的用户名登录并且用“ssh-agent”管理的密匙进行安全验证。

这样很方便吧!

用SSH连接到其它远程计算机用的还是“paranoid(偏执)”默认设置。

如果有些选项没有在配置文件或命令行中设置,那么还是使用默认的“paranoid”设置。

在我们上面举的那个例子中,对于到的SSH连接:

“ForwardAgent”和“Compression”被设置为“Yes”;其它的设置选项(如果没有用命令行参数)“ForwardX11”和“FallBackToRsh”都被设置成“No”。

其它还有一些需要仔细看一看的设置选项是:

lCheckHostIPyes

这个选项用来进行IP地址的检查以防止DNS欺骗。

lCompressionLevel

压缩的级别从“1”(最快)到“9”(压缩率最高)。

默认值为“6”。

lForwardX11yes

为了在本地运行远程的X程序必须设置这个选项。

lLogLevelDEBUG

当SSH出现问题的时候,这选项就很有用了。

默认值为“INFO”。

配置服务端的软件

SSH服务器的配置使用的是“/etc/ssh/sshd_config”配置文件,这些选项的设置在配置文件中已经有了一些说明而且用“mansshd”也可以查看帮助。

请注意OpenSSH对于SSH1.x和2.x没有不同的配置文件。

在默认的设置选项中需要注意的有:

lPermitRootLoginyes

最好把这个选项设置成“PermitRootLoginwithout-password”,这样“root”用户就不能从没有密匙的计算机上登录。

把这个选项设置成“no”将禁止“root”用户登录,只能用“su”命令从普通用户转成“root”。

lX11Forwardingno

把这个选项设置成“yes”允许用户运行远程主机上的X程序。

就算禁止这个选项也不能提高服务器的安全因为用户可以安装他们自己的转发器(forwarder),请参看“mansshd”。

lPasswordAuthenticationyes

把这个选项设置为“no”只允许用户用基于密匙的方式登录。

这当然会给那些经常需要从不同主机登录的用户带来麻烦,但是这能够在很大程度上提高系统的安全性。

基于口令的登录方式有很大的弱点。

l#Subsystem/usr/local/sbin/sftpd

把最前面的#号去掉并且把路径名设置成“/usr/bin/sftpserv”,用户就能使用“sftp”(安全的FTP)了(sftpserv在sftp软件包中)。

因为很多用户对FTP比较熟悉而且“scp”用起来也有一些麻烦,所以“sftp”还是很有用的。

而且2.0.7版本以后的图形化的ftp工具“gftp”也支持“sftp”。

拷贝文件

用“scp”拷贝文件

SSH提供了一些命令和shell用来登录远程服务器。

在默认情况下它不允许你拷贝文件,但是还是提供了一个“scp”命令。

假定你想把本地计算机当前目录下的一个名为“dumb”的文件拷贝到远程服务器上你的家目录下。

而且你在远程服务器上的帐号名为“bilbo”。

可以用这个命令:

scpdumbbilbo@:

.

把文件拷贝回来用这个命令:

scpbilbo@:

dumb.

“scp”调用SSH进行登录,然后拷贝文件,最后调用SSH关闭这个连接。

如果在你的“~/.ssh/config”文件中已经为做了这样的配置:

Host*fbc

HostName

Userbilbo

ForwardAgentyes

那么你就可以用“fbc”来代替“bilbo@”,命令就简化为“scpdumbfbc:

.”。

“scp”假定你在远程主机上的家目录为你的工作目录。

如果你使用相对目录就要相对于家目录。

用“scp”命令的“-r”参数允许递归地拷贝目录。

“scp”也可以在两个不同的远程主机之间拷贝文件。

有时候你可能会试图作这样的事:

用SSH登录到上之后,输入命令“scp[localmachine]:

dumb.”想用它把本地的“dumb”文件拷贝到你当前登录的远程服务器上。

这时候你会看到下面的出错信息:

ssh:

secureconnectionto[localmachine]refused

之所以会出现这样的出错信息是因为你运行的是远程的“scp”命令,它试图登录到在你本地计算机上运行的SSH服务程序……所以最好在本地运行“scp”除非你的本地计算机也运行SSH服务程序。

用“sftp”拷贝文件

如果你习惯使用ftp的方式拷贝文件,可以试着用“sftp”。

“sftp”建立用SSH加密的安全的FTP连接通道,允许使用标准的ftp命令。

还有一个好处就是“sftp”允许你通过“exec”命令运行远程的程序。

从2.0.7版以后,图形化的ftp客户软件“gftp”就支持“sftp”。

如果远程的服务器没有安装sftp服务器软件“sftpserv”,可以把“sftpserv”的可执行文件拷贝到你的远程的家目录中(或者在远程计算机的$PATH环境变量中设置的路径)。

“sftp”会自动激活这个服务软件,你没有必要在远程服务器上有什么特殊的权限。

用“rsync”拷贝文件

“rsync”是用来拷贝、更新和移动远程和本地文件的一个有用的工具,很容易就可以用“-essh”参数和SSH结合起来使用。

“rsync”的一个优点就是,不会拷贝全部的文件,只会拷贝本地目录和远程目录中有区别的文件。

而且它还使用很高效的压缩算法,这样拷贝的速度就很快。

用“加密通道”的ftp拷贝文件

如果你坚持要用传统的FTP客户软件。

SSH可以为几乎所有的协议提供“安全通道”。

FTP是一个有一点奇怪的协议(例如需要两个端口)而且不同的服务程序和服务程序之间、客户程序和客户程序之间还有一些差别。

实现“加密通道”的方法是使用“端口转发”。

你可以把一个没有用到的本地端口(通常大于1000)设置成转发到一个远程服务器上,然后只要连接本地计算机上的这个端口就行了。

有一点复杂是吗?

其实一个基本的想法就是,转发一个端口,让SSH在后台运行,用下面的命令:

ssh[user@remotehost]-f-L1234:

[remotehost]:

21tail-f/etc/motd

接着运行FTP客户,把它设置到指定的端口:

lftp-u[username]-p1234localhost

当然,用这种方法很麻烦而且很容易出错。

所以最好使用前三种方法。

用SSH设置“加密通道”

“加密通道”的基础知识

SSH的“加密通道”是通过“端口转发”来实现的。

你可以在本地端口(没有用到的)和在远程服务器上运行的某个服务的端口之间建立“加密通道”。

然后只要连接到本地端口。

所有对本地端口的请求都被SSH加密并且转发到远程服务器的端口。

当然只有远程服务器上运行SSH服务器软件的时候“加密通道”才能工作。

可以用下面命令检查一些远程服务器是否运行SSH服务:

telnet[fullnam

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1