荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: ykwch.bbs@bbs.cqupt.edu.cn (心蓝--海), 信区: Linux
标  题: SSH入门教程
发信站: 幽幽黄桷兰 (Tue Apr 22 23:39:16 2003)
转信站: SZU!news.tiaozhan.com!news.happynet.org!CQUPT

SSH入门教程
SSH使用指南
介绍SSH
什么是SSH?
传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络
上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,
这些服务程序的安全验证方式也是有其弱点的,就是很容易受到“中间人”(man-in-t
he-middle)这种方式的攻击。所谓“中间人”的攻击方式,就是“中间人”冒充真正的
服务器接收你的传给服务器的数据,然后再冒充你把数据传给真正的服务器。服务器和
你之间的数据传送被“中间人”一转手做了手脚之后,就会出现很严重的问题。
SSH的英文全称是Secure SHell。通过使用SSH,你可以把所有传输的数据进行加密,这
样“中间人”这种攻击方式就不可能实现了,而且也能够防止DNS和IP欺骗。还有一个额
外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它
既可以代替telnet,又可以为ftp、pop、甚至ppp提供一个安全的“通道”。
最初SSH是由芬兰的一家公司开发的。但是因为受版权和加密算法的限制,现在很多人都
转而使用OpenSSH。OpenSSH是SSH的替代软件,而且是免费的,可以预计将来会有越来越
多的人使用它而不是SSH。
SSH是由客户端和服务端的软件组成的,有两个不兼容的版本分别是:1.x和2.x。用SSH
 2.x的客户程序是不能连接到SSH 1.x的服务程序上去的。OpenSSH 2.x同时支持SSH 1.
x和2.x。
SSH的安全验证是如何工作的
从客户端来看,SSH提供两种级别的安全验证。
第一种级别(基于口令的安全验证)只要你知道自己帐号和口令,就可以登录到远程主
机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服
务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻
击。
第二种级别(基于密匙的安全验证)需要依靠密匙,也就是你必须为自己创建一对密匙
,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就
会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在你在
该服务器的家目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。
如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户
端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器

用这种方式,你必须知道自己密匙的口令。但是,与第一种级别相比,第二种级别不需
要在网络上传送口令。
第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因
为他没有你的私人密匙)。但是整个登录的过程可能需要10秒。
安装并测试OpenSSH
因为受到美国法律的限制,在很多Linux的发行版中都没有包括OpenSSH。但是,可以从
网络上下载并安装OpenSSH(有关OpenSSH的安装和配置请参考:http://www.linuxaid.
com.cn/engineer/brimmer/html/OpenSSH.htm)。
安装完OpenSSH之后,用下面命令测试一下:
ssh -l [your accountname on the remote host] [address of the remote host]
如果OpenSSH工作正常,你会看到下面的提示信息:
The authenticity of host [hostname] can't be established.
Key fingerprint is 1024 5f:a0:0b:65:d3:82:df:ab:44:62:6d:98:9c:fe:e9:52.
Are you sure you want to continue connecting (yes/no)?
OpenSSH告诉你它不知道这台主机,但是你不用担心这个问题,因为你是第一次登录这台
主机。键入“yes”。这将把这台主机的“识别标记”加到“~/.ssh/know_hosts”文件
中。第二次访问这台主机的时候就不会再显示这条提示信息了。
然后,SSH提示你输入远程主机上你的帐号的口令。输入完口令之后,就建立了SSH连接
,这之后就可以象使用telnet那样使用SSH了。
SSH的密匙
生成你自己的密匙对
生成并分发你自己的密匙有两个好处:
1) 可以防止“中间人”这种攻击方式
2) 可以只用一个口令就登录到所有你想登录的服务器上
用下面的命令可以生成密匙:
ssh-keygen
如果远程主机使用的是SSH 2.x就要用这个命令:
ssh-keygen –d
在同一台主机上同时有SSH1和SSH2的密匙是没有问题的,因为密匙是存成不同的文件的

ssh-keygen命令运行之后会显示下面的信息:
Generating RSA keys: ............................ooooooO......ooooooO
Key generation complete.
Enter file in which to save the key (/home/[user]/.ssh/identity):
[按下ENTER就行了]
Created directory '/home/[user]/.ssh'.
Enter passphrase (empty for no passphrase):
[输入的口令不会显示在屏幕上]
Enter same passphrase again:
[重新输入一遍口令,如果忘记了口令就只能重新生成一次密匙了]
Your identification has been saved in /home/[user]/.ssh/identity.
[这是你的私人密匙]
Your public key has been saved in /home/[user]/.ssh/identity.pub.
The key fingerprint is: 2a:dc:71:2f:27:84:a2:e4:a1:1e:a9:63:e2:fa:a5:89 [use
r]@[local machine]
“ssh-keygen –d”做的是几乎同样的事,但是把一对密匙存为(默认情况下)“/hom
e/[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” 拷贝到这个目录下并把它重命名为“autho
rized_keys”。然后执行:
chmod 644 .ssh/authorized_keys
这一步是必不可少的。如果除了你之外别人对“authorized_keys”文件也有写的权限,
SSH就不会工作。
如果你想从不同的计算机登录到远程主机,“authorized_keys”文件也可以有多个公用
密匙。在这种情况下,必须在新的计算机上重新生成一对密匙,然后把生成的“identi
fy.pub”文件拷贝并粘贴到远程主机的“authorized_keys”文件里。当然在新的计算机
上你必须有一个帐号,而且密匙是用口令保护的。有一点很重要,就是当你取消了这个
帐号之后,别忘了把这一对密匙删掉。
配置SSH
配置客户端的软件
OpenSSH有三种配置方式:命令行参数、用户配置文件和系统级的配置文件(“/etc/ss
h/ssh_config”)。命令行参数优先于配置文件,用户配置文件优先于系统配置文件。
所有的命令行的参数都能在配置文件中设置。因为在安装的时候没有默认的用户配置文
件,所以要把“/etc/ssh/ssh_config”拷贝并重新命名为“~/.ssh/config”。
标准的配置文件大概是这样的:
[lots of explanations and possible options listed]
# Be paranoid by default
Host *
ForwardAgent no
ForwardX11 no
FallBackToRsh no
还有很多选项的设置可以用“man ssh”查看“CONFIGURATION FILES”这一章。
配置文件是按顺序读取的。先设置的选项先生效。
假定你在www.foobar.com上有一个名为“bilbo”的帐号。而且你要把“ssh-agent”和
“ssh-add”结合起来使用并且使用数据压缩来加快传输速度。因为主机名太长了,你懒
得输入这么长的名字,用“fbc”作为“www.foobar.com”的简称。你的配置文件可以是
这样的:
Host *fbc
HostName www.foobar.com
User bilbo
ForwardAgent yes
Compression yes
# Be paranoid by default
Host *
ForwardAgent no
ForwardX11 no
FallBackToRsh no
你输入“ssh fbc”之后,SSH会自动地从配置文件中找到主机的全名,用你的用户名登
录并且用“ssh-agent”管理的密匙进行安全验证。这样很方便吧!
用SSH连接到其它远程计算机用的还是“paranoid(偏执)”默认设置。如果有些选项没
有在配置文件或命令行中设置,那么还是使用默认的“paranoid”设置。
在我们上面举的那个例子中,对于到www.foobar.com的SSH连接:“ForwardAgent”和“
Compression”被设置为“Yes”;其它的设置选项(如果没有用命令行参数)“Forwar
dX11”和“FallBackToRsh”都被设置成“No”。
其它还有一些需要仔细看一看的设置选项是:
l CheckHostIP yes
这个选项用来进行IP地址的检查以防止DNS欺骗。
l CompressionLevel
压缩的级别从“1”(最快)到“9”(压缩率最高)。默认值为“6”。
l ForwardX11 yes
为了在本地运行远程的X程序必须设置这个选项。
l LogLevel DEBUG
当SSH出现问题的时候,这选项就很有用了。默认值为“INFO”。
配置服务端的软件
SSH服务器的配置使用的是“/etc/ssh/sshd_config”配置文件,这些选项的设置在配置
文件中已经有了一些说明而且用“man sshd”也可以查看帮助。请注意OpenSSH对于SSH
 1.x和2.x没有不同的配置文件。
在默认的设置选项中需要注意的有:
l PermitRootLogin yes
最好把这个选项设置成“PermitRootLogin without-password”,这样“root”用户就
不能从没有密匙的计算机上登录。把这个选项设置成“no”将禁止“root”用户登录,
只能用“su”命令从普通用户转成“root”。
l X11Forwarding no
把这个选项设置成“yes”允许用户运行远程主机上的X程序。就算禁止这个选项也不能
提高服务器的安全因为用户可以安装他们自己的转发器(forwarder),请参看“man s
shd”。
l PasswordAuthentication yes
把这个选项设置为“no”只允许用户用基于密匙的方式登录。这当然会给那些经常需要
从不同主机登录的用户带来麻烦,但是这能够在很大程度上提高系统的安全性。基于口
令的登录方式有很大的弱点。
l # Subsystem /usr/local/sbin/sftpd
把最前面的#号去掉并且把路径名设置成“/usr/bin/sftpserv”,用户就能使用“sft
p”(安全的FTP)了(sftpserv在sftp软件包中)。因为很多用户对FTP比较熟悉而且“
scp”用起来也有一些麻烦,所以“sftp”还是很有用的。而且2.0.7版本以后的图形化
的ftp工具“gftp”也支持“sftp”。
拷贝文件
用“scp”拷贝文件
SSH提供了一些命令和shell用来登录远程服务器。在默认情况下它不允许你拷贝文件,
但是还是提供了一个“scp”命令。
假定你想把本地计算机当前目录下的一个名为“dumb”的文件拷贝到远程服务器www.fo
obar.com上你的家目录下。而且你在远程服务器上的帐号名为“bilbo”。可以用这个命
令:
scp dumb bilbo@www.foobar.com:.
把文件拷贝回来用这个命令:
scp bilbo@www.foobar.com:dumb .
“scp”调用SSH进行登录,然后拷贝文件,最后调用SSH关闭这个连接。
如果在你的“~/.ssh/config”文件中已经为www.foobar.com做了这样的配置:
Host *fbc
HostName www.foobar.com
User bilbo
ForwardAgent yes
那么你就可以用“fbc”来代替“bilbo@www.foobar.com”,命令就简化为“scp dumb
fbc:.”。
“scp”假定你在远程主机上的家目录为你的工作目录。如果你使用相对目录就要相对于
家目录。
用“scp”命令的“-r”参数允许递归地拷贝目录。“scp”也可以在两个不同的远程主
机之间拷贝文件。
有时候你可能会试图作这样的事:用SSH登录到www.foobar.com上之后,输入命令“scp
 [local machine]:dumb .”想用它把本地的“dumb”文件拷贝到你当前登录的远程服务
器上。这时候你会看到下面的出错信息:
ssh: secure connection to [local machine] 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”是用来拷贝、更新和移动远程和本地文件的一个有用的工具,很容易就可以用
“-e ssh”参数和SSH结合起来使用。“rsync”的一个优点就是,不会拷贝全部的文件
,只会拷贝本地目录和远程目录中有区别的文件。而且它还使用很高效的压缩算法,这
样拷贝的速度就很快。
用“加密通道”的ftp拷贝文件
如果你坚持要用传统的FTP客户软件。SSH可以为几乎所有的协议提供“安全通道”。FT
P是一个有一点奇怪的协议(例如需要两个端口)而且不同的服务程序和服务程序之间、
客户程序和客户程序之间还有一些差别。
实现“加密通道”的方法是使用“端口转发”。你可以把一个没有用到的本地端口(通
常大于1000)设置成转发到一个远程服务器上,然后只要连接本地计算机上的这个端口
就行了。有一点复杂是吗?
其实一个基本的想法就是,转发一个端口,让SSH在后台运行,用下面的命令:
ssh [user@remote host] -f -L 1234:[remote host]:21 tail -f /etc/motd
接着运行FTP客户,把它设置到指定的端口:
lftp -u [username] -p 1234 localhost
当然,用这种方法很麻烦而且很容易出错。所以最好使用前三种方法。
用SSH设置“加密通道”
“加密通道”的基础知识
SSH的“加密通道”是通过“端口转发”来实现的。你可以在本地端口(没有用到的)和
在远程服务器上运行的某个服务的端口之间建立“加密通道”。然后只要连接到本地端
口。所有对本地端口的请求都被SSH加密并且转发到远程服务器的端口。当然只有远程服
务器上运行SSH服务器软件的时候“加密通道”才能工作。可以用下面命令检查一些远程
服务器是否运行SSH服务:
telnet [full name of remote host] 22
如果收到这样的出错信息:
telnet: Unable to connect to remote host: Connection refused
就说明远程服务器上没有运行SSH服务软件。
端口转发使用这样的命令语法:
ssh -f [username@remote host] -L [local port]:[full name of remote host]:[re
mote port] [some command]
你不仅可以转发多个端口而且可以在“~/.ssh/config”文件中用“LocalForward”设置
经常使用的一些转发端口。
为POP加上“加密通道”
你可以用POP协议从服务器上取email。为POP加上“加密通道”可以防止POP的密码被网
络监听器(sniffer)监听到。还有一个好处就是SSH的压缩方式可以让邮件传输得更快

假定你在pop.foobar.com上有一个POP帐号,你的用户名是“bilbo”你的POP口令是“t
opsecret”。用来建立SSH“加密通道”的命令是:
ssh -f -C bilbo@pop.foobar.com -L 1234:pop.foobar.com:110 sleep 5
(如果要测试,可以把“sleep”的值加到500)。运行这个命令之后会提示你输入POP口
令:
bilbo@pop.foobar.com's password:
输入口令之后就可以用“telnet”连接到本地的转发端口了。
telnet localhost 1234
你会收到远程mail服务器的“READY”消息。
当然,这个方法要求你手工输入所有的POP命令,这是很不方便的。可以用Fetchmail(
参考how to configure Fetchmail)。Secure POP via SSH mini-HOWTO、man fetchma
il和在“/usr/doc/fetchmail-[…]”目录下的Fetchmail的FAQ都提供了一些具体的例子

请注意IMAP协议使用的是不同的端口:IMAP v2的端口号为143而IMAP v3的端口号为220

为X加上“加密通道”
如果你打算在本地计算机上运行远程SSH服务器上的X程序,那么登录到远程的计算机上
,创建一个名为“~/.ssh/environment”的文件并加上这一行:
XAUTHORITY=/home/[remote user name]/.Xauthority
(如果在远程主机上你的家目录下不存在“.Xauthority”这个文件,那么当用SSH登录
的时候就会自动创建)。
比如启动一个X程序(xterm)可以这个命令:
ssh -f -X -l [remote user name] [remote machine] xterm
这将在远程运行xterm这个程序。其它的X程序也是用相同的方法。
为linuxconf加上“加密通道”
Linuxconf是Linux的配置工具,它支持远程管理。Linuxconf的FAQ重说明了如何通过SS
H使用linuxconf:
其命令为:
remadmin --exec [link_command] linuxconf --guiproto
如果你想在两台计算机之间用加密的方式传送信息,那么最好用ssh。命令是:
remadmin --exec ssh -l [account] linuxconf --guiproto
这是非常有效的而且运行用图形界面管理计算机。
这种方法需要在客户端安装linuxconf。其它的方法还有直接登录到服务器上用“X11Fo
rwarding”或字符界面运行linuxconf。
为Webmin加上“加密通道”
Webmin是一个新的基于浏览器的配置工具。它运行在1000端口。你可以用SSH的“端口转
发”对它进行加密:
ssh -f -l [remote user name] [remote host] -L 1234:[remote host]:10000 tail
-f /etc/motd
把浏览器指向

--
蒹葭苍苍白露为霜所谓伊人在水一方溯洄从之道阻且长
溯游从之宛在水中央
蒹葭萋萋白露未晞所谓伊人在水之湄溯洄从之道阻且跻
溯游从之宛在水中坻
蒹葭采采白露未已所谓伊人在水之涘溯洄从之道阻且右
溯游从之宛在水中沚
※ 来源:·幽幽黄桷兰 bbs.cqupt.edu.cn·[FROM: BlueCrystal]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店