OpenSSH的安装和使用

由于许多网络服务(包括telnet、ftp、http、rsh、rlogin以及其他服务)都可以被电子窃听,我们必须采用安全的方式进行文件移动、权限设置、 shell脚本的运行等等。
        为了防止攻击者窃取每天的网络数据,我们可以 安装使用Secure Shell(ssh)。这里就向大家具体介绍如何安装和使用ssh 服务器和客户端程序。这里说的openssh是一个网上的 免费 软件
Open Secure Shell(openssh)是一个安全的登录系统,可以用来替代telnet、rlogin、rcp等。简单的讲,ssh 是一个通过网络登录进入另一台计算机的程序。
我们这里的openssh主要支持的算法是RSA--RSA算法指的是Rivest-Shamir-Adelman算法。该算法广泛应用于公钥/私钥加密系统。如果要详细了解这方面的内容,可以查找站点:
在本文中主要讨论openssh服务器的安装、配置和客户端的配置、使用
一、openssh服务器端的安装及配置
1.服务器端的安装

安装方式主要是三种:
o安装操作系统时候选中要安装“安全服务器”(只有部分操作系统带有此软件包,如红旗 linux 2.0服务器版)
o rpm包方式安装。
o 源代码方式安装;

a) 安装操作系统时安装
在安装操作系统的时候,在选择软件包的时候,选上“安全服务器”,就会在你的服务器上自动安装好openssh服务器。同时在启动的时候会自动启动sshd的进程。服务器端的配置文件在/etc/ssh/sshd-config中,但是此时你不需要对它进行修改。你要做的仅是在客户机上安装客户端程序。

b) 用rpm包方式安装
在红旗Linux 2.0中需要的rpm包可以从/mnt/cdrom/RedFlag/RPMS(系统安装盘)中获得,它们是:
openssh-2.1.1p4-1.i386.rpm
openssh-clients-2.1.1p4-1.i386.rpm
openssh-askpass-2.1.1p4-1.i386.rpm
openssh-askpass-gnome-2.1.1p4-1.i386.rpm
openssh-server-2.1.1p4-1.i386.rpm
安装用如下命令:
#rpm -i openssh-2.1.1p4-1.i386.rpm
用同样的方法安装其他的四个rpm包,在和a)相同的路径中存放着你所关心的配置文件,当然sshd的主程序在/usr/sbin下。

c) 源代码方式安装
openssh的安装首先要求在系统中已经安装了zlib和Openssl。所以我们需要的以下的安装包:(这里的版本最好采用最新的)
        zlib.tar.gz
openssl-0.9.6a.tar.gz
openssh-2.5.2p2.tar.gz
安装步骤如下:
在/home目录下建立source目录,把以上三个源代码包复制到/home/source目录下,分别对各个包解压缩,再进行相应的configure、make和makeinstall。具体命令如下:
# mkdir /home/source
# cp zlib.tar.gz openssl-0.9.6a.tar.gz openssh-2.5.2p2
.tar.gz /home/source         (接上一行)
# cd /home/source
# tar zxvf zlib.tar.gz
# tar zxvf openssl-0.9.6a.tar.gz
# tar zxvf openssh-2.5.2p2.tar.gz

(注:一般安装linux操作系统的时候都安装了zlib库,故这步不是必须的)
# cd /home/source/zlib-1.1.3
# ./configure -s
# make
# make test
# make install prefix=/usr

# cd /home/source/openssl-0.9.6a
# ./configure -prefix=/home/openssl
# make
# make test
# make install

# cd /home/source/openssh-2.5.2p2
# ./configure --with-ssl-dir=/home/openssl --prefix
=/home/openssh                            (接上一行)
# make
# make install

这样openssh的服务器端就安装完毕,进入/home/openssh的目录,下面的目录 结构是这样的:
bin/  etc/  libexec/  man/  sbin/

bin/下面存放的是命令集
scp  sftp  slogin  ssh  ssh-add  ssh-agent  ssh-keygen  ssh-keyscan

etc/下面存放的是配置文件
libexec/下面存放的是ftp的主程序
man/下面是手册
sbin/下面是ssh的主程序sshd。

2. 配置openssh服务器
在安装完ssh后,下一步就是验证(或是修改,如果是必须的)ssh配置文件中的参数。这些配置文件是:
        。/home/openssh/etc/sshd_config (ssh服务器端的配置文件)
        。/home/openssh/etc/ssh_config  (ssh客户端的配置文件)

sshd_config 是服务器端的配置文件,默认情况下,其内容应该如下:

# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:
/sbin:/home3/ssh/bin

# This is the sshd server system-wide configuration file.  See sshd(8)
# for more information.

Port 22
#Protocol 2,1
#ListenAddress 0.0.0.0
#ListenAddress ::
HostKey /home3/ssh/etc/ssh_host_key
HostKey /home3/ssh/etc/ssh_host_rsa_key
HostKey /home3/ssh/etc/ssh_host_dsa_key
ServerKeyBits 768
LoginGraceTime 600
KeyRegenerationInterval 3600
PermitRootLogin yes
#
# Don't read ~/.rhosts and ~/.shosts files
IgnoreRhosts yes
# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication
#IgnoreUserKnownHosts yes
StrictModes yes
X11Forwarding no
X11DisplayOffset 10
PrintMotd yes
KeepAlive yes

# Logging
SyslogFacility AUTH
LogLevel INFO
#obsoletes QuietMode and FascistLogging

RhostsAuthentication no
#
# For this to work you will also need host keys in /home3/ssh/etc/ssh_known_hosts
RhostsRSAAuthentication no
#
RSAAuthentication yes

# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication yes
PermitEmptyPasswords no

# Comment to enable s/key passwords or PAM interactive authentication
# NB. Neither of these are compiled in by default. Please read the
# notes in the sshd(8) manpage before enabling this on a PAM system.
ChallengeResponseAuthentication no

# To change Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#AFSTokenPassing no
#KerberosTicketCleanup no

# Kerberos TGT Passing does only work with the AFS kaserver
#KerberosTgtPassing yes

#CheckMail yes
#UseLogin no

#MaxStartups 10:30:60
#Banner /etc/issue.net
#ReverseMappingCheck yes

Subsystem       sftp    /home/openssh/libexec/sftp-server

我们根据自己的需要修改这个配置,但是一般不需要做修改。
       
3. 公钥/私钥的产生
  客户机要连接使用SSH协议的主机,除了要有个用户外,还需要针对这个用户的一对密钥,一个是公钥,一个是私钥。产生它们用如下命令:
下面的粗体字是你要输入的。
$./ssh-keygen                (假设当前目录是ssh-keygen所在的目录)
Generating public/private rsa1 key pair.
Enter file in which to save the key (/home/lusan/.ssh
/identity): Return(回车)
Created directory '/home/lusan/.ssh'.
Enter passphrase (empty for no passphrase): hello world
Enter same passphrase again: hello world
Your identification has been saved in /home/lusan/.ssh/identity.
Your public key has been saved in /home/lusan/.ssh/identity.pub.
The key fingerprint is:
eb:62:ac:35:54:07:86:74:28:74:cf:89:18:f7:ae:a9 lusan@linux-128

使用如下命令可以修改公钥/私钥
$ ./ssh-keygen -p
Enter file in which the key is (/home/lusan/.ssh/identity): Return(回车)
Enter old passphrase: hello world
Key has comment 'lusan@linux-128'
Enter new passphrase (empty for no passphrase): hello
Enter same passphrase again: hello
Your identification has been saved with the new passphrase.

接下来要做的就是把公钥复制到服务器端你的$home/.ssl下面,改名为authorized_keys.
$ cd ~/.ssh/
$ mv identity.pub authorized_keys

然后把私钥准备给客户端用,如果你要从 windows上登陆,则应把这个文件 下载到windows中存放。

4. 启动sshd
在设置好相应的配置参数后,以root身份启动sshd了
# /home/openssh/sbin/sshd
此外,sshd是一个守护进程在后台运行,因此,不必须明确地指明它应该在后台运行(sshd&)。

二、客户端的使用

这里客户端的使用有两种情况:在linux下和windows下
1. 在linux下
在你自己的linux机器上,按照一、的快速安装的方法安装好openssh的程序,当然可以选定你自己想要安装的目录。不需要修改ssh_config这个配置文件。你要做的就是把服务器端生成的私钥identity文件复制到$(HOME)/.ssh/下。设置这个文件的权限为只允许自己访问。
$cp identity $(HOME)/.ssh/
$chmod go-rwx $(HOME)/.ssh/identity

然后你就可以这样登录了:
$ ./ssh -l lusan 192.168.43.128
(这时候使用的私钥默认是$(HOME)/.ssh/identity)。你可以在你的客户端的配置文件中指明多个私钥的名称(为了连接多个站点),如:
IdentityFile ~/.ssh/identity.tjyd
IdentityFile ~/.ssh/identity.xydx
等,或者也可以使用:
$ ./ssh -l lusan -i~/.ssh/identity.tjyd xxx.xxx.xxx.xxx
指定一个私钥文件。
可以看用ssh -h 看ssh的更多具体使用方法
Enter passphrase for RSA key 'lusan@linux-128': hello
Last login: Thu Apr 12 14:44:05 2001 from lujf
显示信息表示你登录成功。
粗体字是你要输入的。

2. 在windows下
这里介绍两种软件。

1)SecureCRT
SecureCRT是一种支持SSH协议的远程登陆工具,最新版本可到Van Dyke公司的主页()上去下载。运行目录下的可执行程序SecureCRT.EXE即可启动,从菜单File/New中可以建立一个新的session,需要填写的相关内容是:
Name:为这个会话起个名称
Protocol:有telnet,rlogin,ssh1等等,连接到使用ssh1协议的主机时要选择ssh1
Hostname:IP地址或主机名
Port:使用ssh1协议时一般是缺省的22
Username:用来登陆的用户名
Cipher:口令加密方法,选3DES
Authentication:要选择RSA,注意缺省的是Password
然后点“Advanced”按钮,Identity filename选择“Use session-specified”,并通过浏览按钮选中前面对应的私钥文件(需要先把它下载到本地硬盘来)
设置好后连接主机时,输入对应于该用户的密码(Cipher)即可。

2)Tera Term Pro + TTSSH for Windows
两个软件包是:ttermp23.zip,ttssh154.zip
分别对他们解压缩。进入ttermp23的目录。运行setup程序进行安装。然后把ttssh154目录下的所有文件拷贝到ttermp23的安装目录里面。然后运行ttermp23安装目录中的ttssh.exe,选择登录主机ip和ssh登录方式,按确定后,要输入的是:
username :lusan(username)
passphrase: hello
然后选择use RSA key to login in: 这里选择你的私钥文件(即在linux服务器上生成的$(HOME)/.ssh/identity文件。 这样你就完成登录过程了。
如果你是第一次登录:会提示:
Host key not found from the list of know hosts.
Are you sure you want to continue connecting(yes/no)?
选择yes。
三、通过Zmodem协议传输文件
需要在远程主机上有两个程序lrz和lsz,前者用于上传,后者用于下载,软件可以到网上搜索得到;这里只介绍配合SecureCRT的用法:

1.上传文件
    比如要将D:\temp\up.tar.gz上传到远程主机的/tmp下面,需要使用SecureCRT登陆到该主机然后执行命令:
        $ cd /tmp
        $ /home/tools/lrz        (假设lrz放在/home/tools下)
这时SecureCRT自动弹出对话框,选择D:\temp\up.tar.gz,然后按“Add”按钮加到待传输的文件列表中,关闭该窗口后文件就开始上传到当前目录/tmp下了。可以一次选择多个文件批量上传。
2.下载文件
        比如要下载远程主机的文件/tmp/down.tar.gz,用SecureCRT登陆到该主机然后执行:
        $ cd /tmp
        $ /home/tools/lsz -b down.tar.gz
(假设lsz在/home/tools下)
参数-b指定传输二进制文件,更详细的用法可以用命令lsz --help察看,命令发出后SecureCRT即开始下载,并把文件存放到SecureCRT所在目录的子目录download中,这个缺省的存放目录可以从菜单Option/Session options/File Transfer中更改。
四、sftp的使用
这里我们再简单介绍一下sftp (secure ftp)的安装和使用。前面在介绍sshd(ssh服务器端)的配置文件的时候,在sshd-config的最后一行有:
subsystem  sftp /home3/ssh/libexec/sftp-server
这个语句。是说把sftp作为sshd的一个子系统来运行的。

1.        在linux环境下
安装上述步骤安装好ssh客户端之后,就可以进行secure ftp:
$/bin/sftp -1v user@host -s /libexec/sftp-server
这里的几个参数说明:
-1(数字1):是指明协议的类型
-v(verbose): 显示状态信息
user: 用户名
host: 主机
-s : 发送到服务器端启动sftp-server

输入passphrase后,就进入sftp>的提示符,就下来的用法就和ftp一样了。可以通过help命令查看各种用法。

在linux下还可以用scp进行文件传输,scp就是Secure Copy( 远程文件安全拷贝程序),scp 利用透明的 认证和加密方式在主机间(当然也可以在本机上)进行文件拷贝。只要条件允许,请使用scp来移动文件。
scp 的语法为:scp usr@host1: filename usr@host2:filename 如:
$./scp [email protected]:/home/lusan/.bash_profile .

这里给初学者提供一个比较好的站点:


2.在windows下
使用Tera Term中的kermit协议的receive方式和send方式进行接收和发送。这时候必须在ssh的服务器端提供kermit服务。
这里先介绍kermit服务端的安装使用(源代码方式):
得到kermit的安装包:kermit-7.0-1.src.rpm
解开rpm包,得到kermit的源代码:
#rpm  - i  kermit-7.0-1.src.rpm
然后你可以在/usr/src/redflag/SOURCES下有如下两个文件:cku196.tar.Z和dummy.xpm
编译执行码:
#mkdir /home/kermit
#cp /usr/src/redflag/SOURCES/cku196.tar.Z /home/kermit
#cp /usr/src/redflag/SOURCES/dummy.xpm /home/kermit
#cd /home/kermit
#tar Zxvf cku196.tar.Z
#make
在/home/kermit下生成有wermit这个可执行程序。可以通过wermit -h看它的使用方法。
o 从服务端发送一个文件给客户端接收:
首先用Tera Term通过ssh协议连接服务器,然后用wermit程序发送要发送的文件:
$/wermit -s file
在Tera Term的终端上出现:KERMIT READY TO SEND …的信息,然后在Tera Term终端的file菜单中选“change directory”选项,选定你要存放接收到文件的目录。最后选择file菜单中的Transfer中的Kermit中Receive选项,就出现接收状态。完毕之后就可以在你选定的目录中看到你要接收的文件。

o 从客户端发送一个文件到服务器端:
用ssh连接服务器,然后运行
$/wermit -r
然后在选file菜单中的Transfer中的Kermit中的send,出现一个选择要发送文件的对话框。选定之后出现传输进度状态,完毕后就可以在你执行 wermit的目录中找到你刚才发送的文件。

以上这些功能就完成了sftp的功能。

3.在dos环境下的sftp
首先 在服务器端要装一个sftp的服务程序
        得到sftp-0.9.6.tar.gz软件包,解压缩,编译。
$cp sftp-0.9.6.tar.gz /home/
$cd /home
$tar zxvf sftp-0.9.6.tar.gz
$cd sftp-0.9.6
$./configure -prefix=/home/sftp
$make
在/home/sftp目录下生成sftp,rsftp和sftpserv几个可执行程序即可。

然后,得到客户程序软件包:sftp-0.9.6-01032001.zip。解压缩到到某个目录。在这个目录中就有sftp.exe的文件。你可以使用sftp -h 看它的使用帮助。但是有一点,这是一个仿linux的程序。在运行sftp等程序之前,必须在你的pc机上设置一个home目录,然后在home目录下建立一个.ssh目录,再把针对某个服务器的identity文件拷贝到该.ssh目录下(私钥文件名称必须为identity)。
比如:
                c:\>md linux-128
                c:\>md linux-128\.ssh
                c:\>copy identity linux-128\.ssh
(注意这里的私钥必须命名为identity, 是服务器端生成的私钥, 先下载到本地)
                c:\>set home=c:\linux-128
(环境变量可以在autoexec.bat中设置, 以便启动就生效)这样就为连接linux-128建立了一个home环境

在完成以上步骤后就可以进行sftp的连接:
进入客户程序解压缩的目录,然后执行:
prompt>sftp -v -P /home/sftp usr@host
参数说明:
-v : 生成调试信息
-P: 指定服务器端的sftp服务器程序的路径
usr: 用户名
host: 服务器ip或主机名
接下来你就可以按提示做了。

你可能感兴趣的:(文件系统)