• 2004-04-08

    ssh 安装使用相关

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://dodoflying.blogbus.com/logs/131848.html

    ssh迷你howto

    初来此地, 收获不少, 也想做点贡献. 我发现好像很多人
    不用ssh, 所以写点东西算是抛块砖头.

    本文以redhat9做例子, 但大多数例子也适合其它版本的
    GNU/Linux和UNIX.

    为什么要用ssh? telnet或rsh不是挺好? 首先当然是安全上
    的考虑. telnet和rsh用明码传递密码, 非常不安全. 除了安
    全的因素, ssh还有许多telnet和rsh所没有的功能, 像打通
    防火墙, 压缩后再传以提高速度, 等等. 我想不出有不用ssh
    的理由. 我每天都在用ssh, 但至少有三年没用过telnet了.

    RH9里带有openssh. 你需要以下rpm包: openssh-clients,
    openssh, openssh-server. 另外推荐把openssh-askpass和
    openssh-askpass-gnome也装上. 你可以用
    "rpm -qa | grep ssh"来查看你是否安装了这些包.

    在第一次使用ssh前, 你还应该核对一些东西. 如果你要从
    A机ssh登录到B机, 你要让B允许ssh进来. 你可以运行
    "redhat-config-securitylevel", 然后选"Customize",
    并且"Allow incoming SSH". 另外,你还要确保B机上的
    sshd在运行. 如果没有,运行
    "/sbin/chkconfig --level 2345 sshd on", 然后,
    "/etc/rc.d/init.d/sshd start". 当然这些都需要root的
    身份。

    如果都好了,我们来第一个例子。假设你要登录到
    remote.foo.net, 你在那上面的用户名是q, 你可以,
    "ssh -l q remote.foo.net". 接着你可能会看到,
    The authenticity of host 'remote.foo.net (1.2.3.4)' can't be established.
    RSA key fingerprint is ed:61:e2:ce:40:00:ca:06:93:e8:a4:c2:3a:37:1e:9c.
    Are you sure you want to continue connecting (yes/no)?
    这时你需要输入yes (这一步以后不会出现). 然后
    你会看到,
    Warning: Permanently added 'remote.foo.net (1.2.3.4)' (RSA) to the list of known hosts.
    q@remote.foo.net's password:
    你就输入你的密码后回车。现在你应该已经登录上了。

    你也可以用"ssh q@remote.foo.net"来代替
    “ssh -l q remote.foo.net". 如果你在本地机上
    的用户名和远程的一样, 你可以省略用户名,只要
    "ssh remote.foo.net"就行了。又如果你的本地机是
    local.foo.net, 你可以更简单,"ssh remote"就行.

    如果你在本地用的是windows, 你可以试试putty.

    有时你需要在不同机子间传递文件,你可以用"scp".
    比如说你需要将本地的一个文件myfile拷到远程机
    的某个目录下,你就,
    "scp myfile q@remote.foo.net:/home/q/mydir/"
    或"scp myfile q@remote.foo.net:~/mydir/". 这样
    你在远程上就会有个文件: ~/mydir/myfile. 再举一
    个例子, 你想把remote.foo.net上的~/mydir/myfile
    拷到本地并改名叫mylocalfile. 你可以,
    "scp q@remote.foo.net:~/mydir/myfile mylocalfile".
    在用scp时, 你还当然还可以用*?等通配符. 另外"scp -r"
    也很有用, 可以拷贝整个目录.

    在用ssh和scp时, 你还可以加上"-C". 这样机子间的通
    信就是压缩了再进行, 变快了. 如果你的网速很慢, 效
    果很大.

    有时在使用ssh时, 你会遇到类似下面警告,
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    @ WARNING: POSSIBLE DNS SPOOFING DETECTED! @
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    The RSA host key for xxx has changed,
    and the key for the according IP address xxx
    is unknown. This could either mean that
    DNS SPOOFING is happening or the IP address for the host
    and its host key have changed at the same time.
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
    Someone could be eavesdropping on you right now (man-in-the-middle attack)!
    It is also possible that the RSA host key has just been changed.
    The fingerprint for the RSA key sent by the remote host is
    8a:32:d1:f3:5a:81:27:9b:fd:02:13:dc:da:c5:d0:7d.
    Please contact your system administrator.
    Add correct host key in /home/xxx/.ssh/known_hosts to get rid of this message.Offending key in /home/xxx/.ssh/known_hosts:4
    RSA host key for xxx has changed and you have requested strict checking.
    Host key verification failed.
    这一般是因为远程机重装了的缘故. 你只要改一下
    本地的~/.ssh/known_hosts就行了. 把那个文件里与那个远
    程机有关的删掉就行了.

    ssh还有一个很有用的功能. 例如,
    "ssh remote.foo.net w" 可以显示有哪些用户在那台机子
    上. 当然w也可以是其它命令. 这一招下面可以用上.

    用过一阵ssh后, 你可能厌倦了反复地敲password. 下
    面介绍"钥匙", 可以让你偷些懒, 而且更安全. 你首
    先要生成钥匙. "ssh-keygen -t rsa"可以给你生成
    钥匙. 在生成过程中会要你"Enter passphrase", 你就
    输入一个. 你可以用一句话像, "I am using -*% ssh.".
    最好不要用空的passphrase. 然后你会发现在~/.ssh下有
    两个新文件: id_rsa和id_rsa.pub. 你把id_rsa.pub加入
    到remote.foo.net的/home/q/.ssh/authorized_keys的文
    件末尾. (假设q是你的用户名.) 你当然有你的办法轻易
    做到这一点. 你也可以学了ssh就用上.
    "cat id_rsa.pub | ssh remote.foo.net 'cat >> ~/.ssh/authorized_keys'"
    就行了. (别连"也输入!) 现在再试一下"ssh remote.foo.net",
    你会发现你还需要敲密码, 而且是更长的passphrase. 不过
    如果你刚才输入的passphrase是空的, 你现在就不用敲, 自
    动进去了. 这样当然方便, 但显然不安全! 这就是为什么我
    刚刚不推荐用空的passphrase. 你别着急. 有更好的办法:
    ssh-agent. 下面一段我是从redhat的手册那儿"偷"来的.
    如果你用GNOME,
    Select Main Menu Button (on the Panel) => Preferences
    => More Preferences => Sessions, and click on the
    Startup Programs tab. Click Add and enter /usr/bin/ssh-add
    in the Startup Command text area. Set it a priority to a
    number higher than any existing commands to ensure that it
    is executed last. A good priority number for ssh-add is 70
    or higher. The higher the priority number, the lower the
    priority. If you have other programs listed, this one should
    have the lowest priority. Click Close to exit the program.
    Log out and then log back into GNOME; in other words, restart X.
    After GNOME is started, a dialog box will appear prompting you
    for your passphrase(s). Enter the passphrase requested. If you
    have both DSA and RSA key pairs configured, you will be prompted
    for both. From this point on, you should not be prompted for a
    password by ssh, scp, or sftp.
    大意是说, 选择主菜单=>首选=>更多首选=>sessions. 点击
    "StartupPrograms". 点击"加"并输入/usr/bin/ssh-add".
    将优先级设为70. 然后就退出再登录. 以后每次登录时你会
    被问passphrase, 你就输入你的passphrase. 下面ssh和scp时
    你就不需要密码了. 如果你不用GNOME, 你就自己想办法吧.

    有时候你需要登录的机子在防火墙后面. 假设防火墙是
    firewall.foo.net, 而你想登录的remote.foo.net在防
    火墙后, 无法直接进入. 你可以用ssh打条通道. 先运行
    "ssh -L 9022:remote.foo.net:22 firewall.foo.net".
    然后, "ssh -p 9022 localhost", 你就进remote了.
    注意, 如果你的用户名在个机子上不一样, 你需要用
    "yourname@remote..."等等. 同样道理, 你也可以为
    其它如SMTP等打开通道. 比如,
    "ssh -L 9025:smtp.foo.net:25 firewall.foo.net"后,
    你的localhost:9025就通到smtp.foo.net:25了.

    如果你要等录veryverylonglonglongname.foo.net, 敲
    那么长的名字实在太麻烦了. 有个办法可以帮你. 你建
    立个如下内容文件: ~/.ssh/config.
    Host shortname
    HostName veryverylonglonglongname.foo.net
    这样你"ssh shortname"就行了. 这个文件还可以有很
    多用处.以上一段的防火墙做例子. 你可以建立如下文件:
    ~/.ssh/config.

    Host remote
    HostName 127.0.0.1
    Port 9022

    Host firewall
    HostName firewall.foo.net
    LocalForward 9022 remote.foo.net:22

    这样你就可以用"ssh firewall"来打通道, 以后用
    "ssh remote"来等录remote.foo.net, 用"scp remote"
    来拷文件了.

    ssh还有许许多多功能, 不可能一一介绍, 我也没
    有这个能力. 大家一起学吧!

     

    安装配置SSH

    SSH是一个用来替代TELNETFTP以及R命令的工具包,主要是想解决口令在网上明文传输的问题。为了系统安全和用户自身的权益,推广SSH是必要的。SSH有两个版本,我们现在介绍的是版本2

    1. 安装SSH

    具体步骤如下:

    1. 获得SSH软件包。 (ftp://ftp.pku.edu.cn:/pub/unix/ssh-2.3.0.tar.gz)

    2. 成为超级用户(root).

    3. # gzip –cd ssh-2.3.0.tar.gz |tar xvf

    4. # cd ssh-2.3.0

    5. # ./configure

      注意,如果你希望用tcp_wrappers来控制SSH,那么在configure时需要加上选项“--with-libwrap=/path/to/libwrap/”, 用来告诉SSH关于libwrap.a tcpd.h的位置。

    6. # make

    7. # make install

    SSH有关的程序都放置在/usr/local/bin下,包括sshsftpsshd2 ssh-keygen等。

    二、配置

    SSH的配置文件在/etc/ssh2下,其中包括sshd2的主机公钥和私钥:hostkeyhostkey.pub。这两个文件通常是在安装SSH时自动生成的。你可以通过下面的命令重新来生成它们:

    # rm /etc/ssh2/hostkey*

    # ssh-keygen2 –P /etc/ssh2/hostkey

    ssh2_config 文件一般情形下无需修改。

    三、启动sshd2

    每个要使用SSH的系统都必须在后台运行sshd2。用手工启动:

    # /usr/local/bin/sshd2&

    可以在“/etc/rc2.d/S99local”中加入该命令,这样系统每次启动时会自动启动sshd2

    四、用tcp_wrappers控制SSH

    安装SSH的站点可以用tcp_wrappers来限制哪些IP地址可以通过ssh来访问自己。比如,在/etc/hosts.allow中加入

    sshd,sshd2: 10.0.0.1

    那么只有10.0.0.1可以通过ssh来访问该主机。

    以上都是系统管理员完成的工作。下面我们说说普通用户如何使用SSH

    五、基本应用

    每个用户在使用SSH之前,都要完成以下步骤:

    1. 在本地主机(比如,local.pku.edu.cn)上生成自己的ssh公钥和私钥。命令如下:

      local# ssh-keygen

      Generating 1024-bit dsa key pair

      1 oOo.oOo.o

      Key generated.

      1024-bit dsa, teng@ns, Fri Oct 20 2000 17:27:05

      Passphrase :************ /*在此输入你的口令,以后访问这台主机时要用。

      Again :************ /*

      Private key saved to /home1/teng/.ssh2/id_dsa_1024_a

      Public key saved to /home1/teng/.ssh2/id_dsa_1024_a.pub

      生成的私钥和公钥(id_dsa_1024_aid_dsa_1024_a.pub)存放在你家目录的~/.ssh2目录下。和用户相关的SSH配置文件都在~/.ssh2下。私钥由用户保存在本地主机上,而公钥需传送到远地主机的你自己的帐号的~/.ssh2下,如果你要用ssh2访问本地主机的话。

    2. ~/.ssh2下创建“identification”文件用来说明进行身份认证的私钥。命令如下:

    local:~/.ssh2# echo "IdKey id_dsa_1024_a" > identification

    3.同样地,在远地主机(比如,remote.pku.edu.cn)上完成上面步骤。

    4.将本地(local.pku.edu.cn)下你自己(这里是“teng)的公钥(id_dsa_1024_a.pub)拷贝到远地主机(remote.pku.edu.cn)上你自己家目录下的.ssh2目录下,可命名为“local.pub”,一般用ftp上传即可。

    1. 在远地主机上,你自己家目录的.ssh2目录下,创建“authorization”文件,其中指定用来进行身份认证的公钥文件。命令如下:

      remote:~/.ssh2# echo “Key local.pub” > authorization

    2. 现在你可以从本地用ssh2登录到远地系统了。命令如下:

    local# ssh remote.pku.edu.cn

    Passphrase for key "/home1/teng/.ssh2/id_dsa_1024_a" with comment "1024-bit dsa,

    teng@ns, Fri Oct 20 2000 17:27:05":***********

    这时会要你输入你的ssh口令(Passphrase)。验证通过后,即登录到remote主机上。
    -----------------------------

    首先,SSH软件包由两部分组成,一部分是服务器端软件包,另一部分是客户软件包。针对UNIX、Linux系统,这两个软件包是分开打包在两个不同的文件中的。在Windows 9x/NT/2000中,也分为两部分,不同之处在于,服务器软件包只能运行在Windows NT及Windows 2000 Server以上的版本中,而客户端SSH可以运行在所有的Windows系统中。此外,SSH还分为SSH1及SSH2两个版本,SSH1是一个完全免费的软件包,而SSH2在商业使用时则要付费。由其命名也可知SSH1是第一版,它的功能没有SSH2强大,但是,由于它是免费的,所以广泛地使用在很多网站中。SSH2中加入了很多功能,并且兼容SSH1服务器,可以对SSH1的客户端提供很好的服务支持。所以,如果你的系统中安装了SSH2,那就没有必要再安装SSH1软件包了。

      UNIX/Linux下SSH2安装步骤

      1.下载软件包,下载地址www.ssh.com,下载最新软件包SSH2,最好下载源程序软件包自己进行自行编译。

      2.解压及安装:

      # tar -zxvf ssh2-2.4.0.tar.gz

      # cd ssh2-2.4.0

      # ./configure

      # make

      #make install

      安装完成。这一过程实际上将服务器软件包及客户端软件一起安装了,不必再次安装客户端软件包。

      已编译好的二进制软件包以rpm格式存放在ftp://ftp.ssh.com/pub/ssh/rpm目录下。它是一个给非商业用户使用的软件包,软件包名称为:ssh-2.4.0-1.i386.rpm,其中包含了对X Window的支持,另一个不支持X Window的软件包为ssh-2.4.0-1nox.i386.rpm,下载后可以直接安装。安装程序将SSH2软件包安装在/usr/local/bin及/usr/local/sbin下。

      Windows NT上安装SSH

      在NT及Windows 2000 Server环境下,可选择的服务器软件有:Vshell、ssh2-2.4.0.win-server。Vshell是由Van Dyke提供的一个可以在Windows NT/2000环境下提供SSH2服务器的软件包,其下载地址如下:http://www.vandyke.com/download/index.html。另一个运行在Windows环境下的SSH服务器是SSHWinServer.exe,可以直接从ftp://ftp.ssh.com/pub/ssh目录下下载。

      Windows环境下的安装十分简单,本文不再多介绍。

      与UNIX不同,在Windows环境下,需要分别安装服务器及客户端软件包。运行在Windows环境下的客户端软件,也可以从以上两个站点下载得到,文件名分别为SecureCRT及SSHWin-2.4.0-pl2。

      关于密钥的准备工作

      A.服务器端产生用户的自己的加密密钥及对外公开使用的公钥。在UNIX环境下,产生密钥的方法如下:

      -keygen

      要求用户输入一个长的认证字串,这个字串的功能同password相当,但是,它更长,一般是在20个字符以内。再次输入相同的字串以确认输入的正确,之后,系统产生一对密钥及公钥。将公钥复制到本地,以便客户端对服务器发送的信息进行解密用。当然,如果你不复制,在第一次登录时,服务器会将它的公钥自动推给客户机,以便客户机能对服务器提供的信息进行解密识别。

      B.客户端产生用户的加密密钥及公钥。客户端产生自己的密钥及公钥的方法与服务器端相同。而Windows环境下的一些支持SSH的客户端软件都采用自己生成的方法,具体情况各不相同,但是可以肯定的是所有的支持SSH的客户端都可以而且必须产生。以sshWin2.4为例说明如下:

      打开选单:Edit→Settings→Globe settings→User keys→Generate New keypairs,按照提示会自动产生新的密钥及公钥对。

      最后,将客户机产生的公钥复制到服务端的主机上用户的目录中(在UNIX下应为/home/usrname/.ssh2目录中)。不同的版本的SSH对公钥及密钥的文件名有特定的要求,具体情况请阅读软件包中的安装说明。

      启动SSH服务器

      在UNIX/Linux环境下,服务器程序放置在/usr/local/sbin目录下,启动方法如下:

      # sshd

      # ps x

      可以看到SSHD已经启动了。如果不希望每次重启动系统,都要手工运行启动SSHD,则可以自己写一个脚本,放置在init.d目录下,让系统启动后,自动执行SSHD服务的启动工作。或者直接在rc.local中加入一行/usr/local/sbin/sshd也可。

      Windows NT/2000/下启动SSH2 Server,运行程序组中的start SSH2 Server即可。

      使用SSH

      客户端在UNIX/Linux系统中就是SSH,存放在/usr/local/bin目录下。其中有SSH1、SSH2、scp等客户端工具,使用SSH登录远程主机方法如下:

       host.ip.of.remote

      如同使用Telnet一样,不同之处是要求用户输入认证字串,如果认证字串通过了认证,则用户直接登录成功;如果不成功,则是要求用户输入系统口令。口令认证成功后,用户也可以成功登录系统。从使用上看,与Telnet没有什么不同之处。而且有了SSH客户端软件,如果你要上传文件,不必向以前一样再开一个FTP窗口,再次认证,然后上传文件。使用SSH客户端自带的scp工具,就可以直接将文件上传到远端服务器上。使用方法如下:

       host1:dir/filename host2:/home/abc/filename

      在Windows系统中,可供使用的SSH客户端有:SecurCRT,也即CRT的支持SSH的版本(下载地址:http://www.vandyke.com/),这是一个很好的支持SSH的远程终端,它同时支持SSH1及SSH2。用户可以根据服务器端自由选择,让它支持相应的标准。

      另一个可供选择的是ssh.com提供的客户端,下载地址:ftp://ftp.ssh.com/pub/ssh/SSHWin-2.4.0-pl2.exe,这是新版本的SSH2客户端。

      另外,还有支持SSH的FTP客户端工具,其中sshwin-2.4中就有一个SSH Secure File Transfer Client,它可以用来在两个主机之间传输加密后的文件。也即scp的功能。配合SecureCRT的也有一个相应的支持SSH的FTP工具,其名称为:SecureFX,可以从www.vandyke.com/下载使用。

      由于种种原因,一些支持SSH的GUI客户端不一定会很好地支持以上各个服务器,大家可以自行组合以上工具,找到适合自己的工具。一般来说,在UNIX下的客户端对各种服务器的支持是最好的。通常在选择服务器及客户端软件时,最好选择同一软件商的产品,这样不会出现不兼容的问题。

      需要补充的是,如果你既想使用SSH2又不想付费,那么一个可供选择的自由软件是Openssh,它是一个遵守GPL协议的软件包,同时支持SSH1及SSH2标准,是另一个被广泛使用的SSH软件包(可以从www.openssh.com下载)。Openssh的最新版本为Openssh-2.5.1,提供全部源码。不过,在编译前,应仔细阅读其说明文件。编译过程中要用到zlib及openssl两个软件包,用户首先需要下载并安装它们,之后再编译openssh。具体过程请阅读软件包中的install文件。

    -------------------------

    瞎搞一通,终于成功

    没办法,找不到答案,我自己又急着用,只能自己瞎搞了,还好,幸运之神总是对我十分的恩宠,下面说说我的安装过程:

    1、软件包下载:
    ftp://ftp.openbsd.org/pub/OpenBSD/O...sh-3.4p1.tar.gz

    2、tar zxvf openssh-3.4p1.tar.gz
    3、cd openssh-3.41
    ./configure --prefix=/usr/local/ssh \
    --sysconfdir=/etc/ssh \
    --with-tcp-wrappers \
    --with-ipv4-default \
    --with-md5-passwords
    4、make
    5、make install
    注:安装完成以后,会自动生成主机密钥,还会提示需要sshd用户帐号,可用useradd加一个sshd用户,不过我最后测试,好像没有sshd帐号也行。
    6、install /contrib/redhat/sshd.pam /etc/pam.d/sshd
    7、cp contrib/redhat/sshd.init /etc/rc.d/init.d/sshd
    cd /etc/rc.d/init.d
    chkconfig --level 3 sshd on ;配置成系统服务
    8、[root@mineserver root]# cat /etc/ssh/ssh_config
    Host *
    ForwardAgent no
    ForwardX11 no
    RhostsAuthentication no
    RhostsRSAAuthentication no
    RSAAuthentication yes
    PasswordAuthentication yes
    BatchMode no
    CheckHostIP yes
    StrictHostKeyChecking ask
    IdentityFile ~/.ssh/identity
    Port 22
    Cipher 3des
    EscapeChar ~
    9、[root@mineserver root]# cat /etc/ssh/sshd_config
    PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/ssh/bin
    Port 22
    ListenAddress 0.0.0.0
    ListenAddress ::
    HostKey /etc/ssh/ssh_host_key
    HostKey /etc/ssh/ssh_host_rsa_key
    HostKey /etc/ssh/ssh_host_dsa_key
    KeyRegenerationInterval 3600
    ServerKeyBits 768
    SyslogFacility AUTH
    LogLevel INFO
    LoginGraceTime 600
    #PermitRootLogin yes #还是不要让root直接登录为妙!
    StrictModes yes
    RSAAuthentication yes
    PubkeyAuthentication yes
    RhostsAuthentication no
    IgnoreRhosts yes
    RhostsRSAAuthentication no
    HostbasedAuthentication no
    IgnoreUserKnownHosts no
    PasswordAuthentication yes
    PermitEmptyPasswords no
    Subsystem sftp /usr/local/ssh/libexec/sftp-server
    10、配置用户的加密密钥
    useradd test
    passwd test
    su test
    ssh-keygen -d
    出现提示请回车并输入passwd,再次输入passwd。
    注:这个密码是系统加密运算时用到的,登录时还用原来密码。
    11、启动服务
    /etc/rc.d/init.d/sshd start
    12、在客户端用test帐号进行测试。

    这个配置只是我的初步摸索,若有错误也是再所难免,欢迎大家验证。
    不要问具体参数是什么意思,我也是一知半解,哈。。。

    下载地址

    1

    2

    openssh

    openssh

    -----------------------


    收藏到:Del.icio.us




    引用

    下面Blog引用了该文: