第二章 SSH客户端的基本用法


    最常用功能,1、经由安全连接登录到远程计算机。2、通过安全连接在计算机间拷贝文件。

    当你第一次连接SSH服务器时,出现问答时要回答“yes”,把已知名主机的密钥的公共部分拷贝一份存在本地。之后你每次连接这台服务器,就用这个公钥来验证远程主机。最好是能在首次连接前就能获得这个公钥,否则第一次连接服务器时你可能已受到中间人***。

    使用密钥进行认证,SSH支持公钥认证,可以使用加密密钥,密钥比密码更安全。
    SSH证书使用一对密钥,一个私钥,一个公钥,私钥只保存你独有的一些秘密信息。SSH用其向服务器证明自已的身份。公钥是公开的,可以随便将其放入SSH服务器上自已的帐号中,在认证时,进行私钥和公钥协商,如果匹配,那么身份就得以证明,认证就成功。

    在使用公钥认证以前,首先要进行一些设置:
    1、需要一对密钥,还需要使用一个口令来保护自已的私钥。
    使用ssh-keygen程序生成一对密钥。如果不存在SSH目录,程序为自动创建本地SSH目录~/.ssh,并将所生成的密钥分成两个文件存储,公有 部份identity.pub,私有部分identity,或id_dsa_1024_a,id_dsa_1024_a.pub(ssh2)。
    2、需要在SSH服务器上安装自已的公钥。
    通过配置SSH目录中的一个文件实现,对于SSH1 AND OPENSSH来说该文件是
~/.ssh/authorized_keys。对SSH2来说是~/.ssh2/authorization。OPENSSH中的SSH-2连接自 3.0版本起也一同使用authorized_keys文件。3.0版本前的使用authorized_keys2。把用户本地机器生成 identity.pub文件内容加入其中。对SSH2来说,用户需编辑两个文件,一个客户端一个在服务器端,在客户端,要创建或编辑文件~/.ssh2 /identification并在其中插入一行,说明自已的私钥文件名: IdKey id_dsa_1024_a.
    在服务器端,要创建或编辑文件~/.ssh2/authorization,该文件包含有公钥信息,每行一个,但和SSH1的 authorized_keys文件不同(authorized_keys中包含有公钥的拷贝),authorization中只给出公钥文件名:Key id_dsa_1024_a.pub。最后,把这个文件从本地机器上拷贝到服务器~/.ssh2中。为安全起见,要确保ssh目录的安全,只有所有者才有 权写入。如果远程用户的SSH配置文件的权限设置不当,服务器可能会拒绝进行认证。

    公钥认证比密码认证更安全,因为:
    1、公钥认证需要两个加密部份(磁盘上的identify文件和用户头脑中的口令),***都必须具备两种条件才行。密码认证只需要一个部份,那就是密码,它可能更容易被窃取。
    2、在公钥认证中,口令和密钥都不用发给远程主机,只要把前面讨论的认证者发给远程主机就可以了,因此,并没有秘密信息传出客户端。
    3、机器生成的密钥是不可能猜测出来的,而人生成的密码容易受到字典***。
    通过禁用密码认证并只允许使用密钥认证能极大提高主机的安全性。

    如果要修改密钥
    如果已经生成一个密钥对,并把公钥拷贝到多个SSH服务器上了,用户有一天决定修改自已的身份,因为再运行ssh-keygen。这样,就会覆盖identify and identify.pub文件,用户之前的公钥就没用了,必须把新公钥再次拷贝到各个服务器上。这是很头疼的,所以建议:
    1、不能局限于仅仅使用一个密钥对,可随意生一此密钥对,将其保存在不同的文件中,并将其用作不同的用途。
    2、如果只是想修改口令,就不必重新生成一个密钥对,ssh-keygen有一个命令行选项可以替换现有的密钥口令。ssh1 and openssh是-p,对于ssh2是-e。这样,因为私钥没变,所以公钥依然不效,中需使用新口令对私钥进行解密就可以了。

    ssh代理
    它可以把私钥保存在内存中,为认证提供服务,不用重复输入密码。直到用户退出为止。代理程序是ssh-agent。可手工运行也可编辑~/.login 或~/.xsession来自动运行。
$ ssh-agent $SHELL   其中SHELL是用户登录shell的环境变量。运行该命令后,打开另外一个shell,在这个shell中可以访问代理。
    接着用ssh-add命令装入私钥。这样,使用ssh and scp命令就不用再提醒输入口令了。口令装入内存中。如果用户正运行x window系统,并设置了DISPLAY环境变量,而标准输入不是终端,那么ssh-add就使用一个图形化X程序ssh-askpass来读取口令。要强制ssh-add使用X来读取口令,请在命令行中输入ssh-add < /dev/null。
    -l 参数显示内存中的密钥
    -d 参数从代理中删除密钥 $ ssh-add -d ~/.ssh/id_xxx.pub
    -D 是删除所有密钥
    -t 对加载的密钥设置超时时间,超时代理将自动卸载密钥。
    -L -U 对代理进行加锁和解锁,当你离开计算机而不想退出登录时有用。

    代理转发
    可能通过代理转发功能,可以用SCP把文件从远程SSH服务器上拷贝到第三方SSH主机上。
    条件是你在第三方SSH主机上必须有一个帐号。具体操作是这样的:
    1、在本地主机上运行命令:# scp pat@shell.isp.com:print-me
    2、 psmith@other.host.net:other-print-me这个scp进程与本地代理进行联系,并让用户和shell.isp.com进行认证。
    3、自动在shell.isp.com上执行第二个scp,用来把文件拷贝到other.host.net主机上。由于启用了代理转发(SSH1 AND SSH2默认是打开的,openssh默认是关闭的),因此shell.isp.com上的SSH服务器就充当一个代理。
    4、第二个scp进程通过联系shell.isp.com上的代理试图让用户和other.host.net进行认证。
    5、shell.isp.net上ssh服务器秘密与用户的本地代理进行通信,从而构建出一个认证者来提供用户的证书并将其传回服务器。
    6、服务器为第二个scp进程验证用户的身份,other.host.net上的认证获得成功。
    7、开始拷贝文件。
    由于代理转发不会把私钥发送到远程主机上,而是把认证返回第一台机进行处理,因此密钥是安全的。

    不用密码或口令进行连接方式
    1、使用代理的公钥认证。
    2、可信主机认证。
    3、Kerberos认证。
    在后文中将会讨论这些方式的优缺点。

    sftp
    它是在SSH上的一个独立文件传输工具,操作与ftp类似,可以在一个会话中调用多个命令进行文件拷贝和处理,而scp每次调用时都要打开一个会话。sftp不区分ascii and binary传输模式,只使用二进制模式,因此,如果使用它在windows and unix之间拷贝ascii文件,那么就不能正确转换行结束符。
 
为了您的安全,请只打开来源可靠的网址

打开网站    取消

来自: http://hi.baidu.com/casualzone/blog/item/2f78ca16790c520ec83d6d5c.html