精华内容
下载资源
问答
  • SSH介绍

    2017-04-04 20:13:54
    因为在学习中用到了SSH登录远端主机,查找了一些资料,总结如下: SSH 为 Secure Shell (安全外壳协议)的缩写,由 IETF 的网络小组(Network Working Group)所制定,属于应用层安全协议。SSH 是目前较可靠,专...

    因为在学习中用到了SSH登录远端主机,查找了一些资料,总结如下:

    SSH

    为 Secure Shell (安全外壳协议)的缩写,由 IETF 的网络小组(Network Working Group)所制定,属于应用层安全协议。SSH 是目前较可靠,专为远程登录会话和其他网

    络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。

    上面提到SSH是“安全”的,这个是与传统的网络服务程序比较而言。传统的网络服务如ftp、pop、telnet在网络上使用明文传送口令和数据,容易受到“中间人”的攻击。而通过使用

    SSH可以把所有的传输数据加密和压缩,不仅能够避免来自“中间人”的攻击,同时可以提高传输效率。

    SSH提供两种验证方式

    1.基于口令的安全验证:只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有

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

    2.基于密匙的安全验证:需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发

    出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一

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

    SSH常用命令格式

    ssh [-l login_name] [-p port] [username@]hostname(ipaddress)

    1.不指定用户:ssh ipaddress (如:ssh 192.168.0.103)

    2.指定登陆用户:ssh -l username 192.168.0。103 或者 ssh username@192.168.0.103

    3. 指定端口:ssh -p 1234  192.168.0.103 或ssh -p 1234  username@192.168.0.103

    4. 绑定源地址:ssh -b 192.168.0.200 -l username 192.168.0.103

    以上的192.168.0.103地址仅作为举例使用。

    
    展开全文
  • SSH介绍详细分析SSH介绍详细分析SSH介绍详细分析SSH介绍详细分析SSH介绍详细分析SSH介绍详细分析SSH介绍详细分析
  • SSH介绍以及使用

    千次阅读 2020-10-05 20:44:26
    什么是sshSSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 ...

    什么是ssh?
    SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。

    SSH是标准的网络协议,可用于大多数UNIX操作系统,能够实现字符界面的远程登录管理,它默认使用22号端口,采用密文的形式在网络中传输数据,相对于通过明文传输的Telnet,具有更高的安全性。

    SSH提供了口令和密钥两种用户验证方式,这两者都是通过密文传输数据的。不同的是,口令用户验证方式传输的是用户的账户名和密码,这要求输入的密码具有足够的复杂度才能具有更高的安全性。

    而基于密钥的安全验证必须为用户自己创建一对密钥,并把共有的密钥放在需要访问的服务器上。当需要连接到SSH服务器上时,客户端软件就会向服务器发出请求,请求使用客户端的密钥进行安全验证。服务器收到请求之后,先在该用户的根目录下寻找共有密钥,然后把它和发送过来的公有密钥进行比较。如果两个密钥一致,服务器就用公有的密钥加密“质询”,并把它发送给客户端软件。客户端收到质询之后,就可以用本地的私人密钥解密再把它发送给服务器。这种方式是相当安全的。

    SSH服务认证类型:

    基于口令的认证

    基于口令的安全验证的方式就是大家现在一直在用的,只要知道服务器的SSH连接帐号和口令(当然也要知道对应服务器的 IP及开放的 SSH端口,默认为22 ),就可以通过 ssh客户端登录到这台远程主机。此时,联机过程中所有传输的数据都是加密的。事例:

    ssh 192.168.152.130

    在这里插入图片描述

    基于秘钥认证:

    首先在客户端生成一对秘钥:

    
    ssh-keygen -t dsa
    #或
    ssh-keygen -t rsa
    

    生成的私钥默认位置在/root/.ssh/下面
    下面输入的密码意为是否对私钥再进行加密。
    在这里插入图片描述

    将刚才客户端生成的公钥上传到服务器端:
    在这里插入图片描述

    
    ssh-copy-id -i id_dsa.pub root@192.168.152.136
    

    在这里插入图片描述

    测试:

    
    ssh  192.168.152.136
    

    可以直接登录了,不需要密码
    在这里插入图片描述

    SSH配置文件详解:

    Ssh客户端配置文件详解:

    
    vi /etc/ssh/ssh_config
    

    Host * #选项“Host”只对能够匹配后面字串的计算机有效。“*”表示所有的
    计算机。
    ForwardAgent no #设置连接是否经过验证代理(如果存在)转发给远程计算机。
    ForwardX11 no #设置X11连接是否被自动重定向到安全的通道和显示集(DISPLAY set)
    RhostsAuthentication n #设置是否使用基于rhosts的安全验证。
    RhostsRSAAuthentication no #设置是否使用用RSA算法的基于rhosts的安全验证。
    RSAAuthentication yes #设置是否使用RSA算法进行安全验证。
    PasswordAuthentication yes #设置是否使用口令验证。
    FallBackToRsh no #设置如果用ssh连接出现错误是否自动使用rsh。
    UseRsh no #设置是否在这台计算机上使用“rlogin/rsh”。
    BatchMode no #如果设为“yes”,passphrase/password(交互式输入口令)的提示将被禁止。当不能交互式输入口令的时候,这个选项对脚本文件和批处理任务十分有用。
    CheckHostIP yes #设置ssh是否查看连接到服务器的主机的IP地址以防止DNS欺骗。建议设置为“yes”。
    StrictHostKeyChecking no #如果设置成“yes”,ssh就不会自动把计算机的密匙加入“
    $HOME/.ssh/known_hosts”文件,并且一旦计算机的密匙发生了变化,就拒绝连接。
    IdentityFile ~/.ssh/identity #设置从哪个文件读取用户的RSA安全验证标识。
    Port 22 #设置连接到远程主机的端口。
    Cipher blowfish #设置加密用的密码。
    EscapeChar ~ #设置escape字符

    Ssh服务端配置文件详解:

    
    vi  /etc/ssh/sshd_config
    

    Port 22  # SSH 预设使用 22 这个 port,您也可以使用多的 port !
    Protocol 2,1  # 选择的 SSH 协议版本,可以是 1 也可以是 2 ,如果要同时支持两者,就必须要使用 2,1 这个分隔了!
    ListenAddress 0.0.0.0  
    #监听的主机适配卡!举个例子来说,如果您有两个 IP,分别是 192.168.0.100 及 192.168.2.20 ,那么只想要开放 192.168.0.100 时,
    #就可以写如同下面的样式:ListenAddress 192.168.0.100 只监听来自 192.168.0.100 这个 IP 的SSH联机。如果不使用设定的话,则预设所有接口均接受 SSH
    PidFile /var/run/sshd.pid  # 可以放置 SSHD 这个 PID 的档案!左列为默认值
    LoginGraceTime 600 # 当使用者连上 SSH server 之后,会出现输入密码的画面,在该画面中,在多久时间内没有成功连上 SSH server ,就断线!时间为秒!
    Compression yes  # 是否可以使用压缩指令?
    HostKey /etc/ssh/ssh_host_key # SSH version 1 使用的私钥
    HostKey /etc/ssh/ssh_host_rsa_key # SSH version 2 使用的 RSA 私钥
    HostKey /etc/ssh/ssh_host_dsa_key # SSH version 2 使用的 DSA 私钥
    KeyRegenerationInterval 3600   # 由前面联机的说明可以知道, version 1 会使用 server 的
    Public Key ,每隔一段时间来重新建立一次!时间为秒!
    ServerKeyBits 768   # Server key 的长度!
    SyslogFacility AUTH  # 当有人使用 SSH 登入系统的时候,SSH会记录信息
    LogLevel INFO     # 登录记录的等级—》全部
    PermitRootLogin no  # 是否允许 root 登入!预设是允许的,但是建议设定成 no!
    UserLogin no      # 在 SSH 底下本来就不接受 login 这个程序的登入!
    StrictModes yes      # 当使用者的 host key 改变之后,Server 就不接受联机
    RSAAuthentication yes   # 是否使用纯的 RSA 认证!?仅针对 version 1 !
    PubkeyAuthentication yes  # 是否允许 Public Key ?只有 version 2
    AuthorizedKeysFile .ssh/authorized_keys #设定若要使用不需要密码登入的账号时,那么那个账号的存放档案所在档名!
    RhostsAuthentication no  # 本机系统不使用 .rhosts , .rhosts 不安全!
    IgnoreRhosts yes      # 是否取消使用 ~/.ssh/.rhosts 来做为认证!
    RhostsRSAAuthentication no # 针对 version 1 ,使用 rhosts 档案在/etc/hosts.equiv配合 RSA 演算方式来进行认证!
    HostbasedAuthentication no # 这个项目与上面的项目类似,不过是给 version 2 使用的!
    IgnoreUserKnownHosts no  # 是否忽略家目录内的 ~/.ssh/known_hosts 这个档案所记录的主机内容
    PasswordAuthentication yes # 密码验证当然是需要的!
    PermitEmptyPasswords no  # 上面那一项如果设定为 yes 的话,这一项就最好设定为 no ,这个项目在是否允许以空的密码登入!
    ChallengeResponseAuthentication yes # 挑战任何的密码认证!所以,任何 login.conf规定的认证方式,均可适用!
    PAMAuthenticationViaKbdInt yes # 是否启用其它的 PAM 模块!启用这个模块将会导致
    PasswordAuthentication 设定失效!
    与Kerberos 有关的参数设定!底下不用设定  
    KerberosAuthentication no  
    KerberosOrLocalPasswd yes  
    KerberosTicketCleanup yes  ​
    KerberosTgtPassing no
    有关在 X-Window 底下使用的相关设定  
    X11Forwarding yes  
    X11DisplayOffset 10  
    X11UseLocalhost yes
    PrintMotd no # 登入后是否显示出一些信息呢?例如上次登入的时间、地点等,预设是 yes ,但是,如果为了安全,可以考虑改为 no !
    PrintLastLog yes      # 显示上次登入的信息!可以啊!预设也是 yes !
    KeepAlive yes       # 一般而言,如果设定这项目的话,那么 SSH Server 会传送
    KeepAlive 的讯息给 Client 端,以确保两者的联机正常!在这个情况下,任何一端死掉后, SSH 可以立刻知道!而不会有僵尸程序的发生!
    UsePrivilegeSeparation yes # 使用者的权限设定项目!
    MaxStartups 10       # 同时允许几个尚未登入的联机画面?
    DenyUsers *        # 设定受抵挡的使用者名称

    SSH其他功能:

    SSH端口转发:

    SSH 不光会自动加密和解密所有 SSH 客户端与服务端之间的网络数据。而且SSH 还有一个非常有用的功能,这就是端口转发。它能够将其他 TCP 端口的网络数据通过 SSH 链接来转发,并且自动提供了相应的加密及解密服务。这一过程有时也被叫做“隧道”(tunneling),这是因为 SSH 为其他 TCP 链接提供了一个安全的通道来进行传输而得名。

    ssh端口转发两大功能
    1.加密SSH Client 端至SSH Server端之间的通信数据
    2.为了突破防火墙的限制完成一些之前无法建立的TCP连接ssh端口转发又分为本地转发和远程转发

    本地转发

    本地转发主要运用于目标服务器因为防火墙规则无法访问,只能由处于同一个局域网内的机器访问,这时候就需要我们用本地端口转发了

    本地端口转发格式如下:

    
    ssh -L <local port>:<remote host>:<remote port> <SSH hostname>
    

    在这里插入图片描述

    外部主机A要访问数据库服务器C,但是因为防火墙规则无法直接访问,这时候我们要先连接内部服务器B,通过B来连接C,也就是拿B做跳板
    首先我们要在外部主机上选择一个端口作为监听端口,我们使用telnet访问,所以不能用管理员访问,而非管理员用户对1-1023端口是没有权限的,所以我们要选1024-65535之间未被占用的端口。
    在数据库服务器上也要安装telnet.server
    我们只需要在外部主机上操作就可以了
    首先我们看能否直接连接数据库服务器
    在这里插入图片描述

    我们做一个本地端口转发

    
    ssh -L 1080:centos6:23 -Nf centos7dns
    

    centos6就是我们要访问的数据库服务器
    centos7dns就是我们的转发服务器
    1080就是我们选择的本地端口

    -f:后台启用
    -N:不打开远程shell,处于等待状态
    -g:启用网关功能
    这个时候我们只需通过本地监听的1080端口就能访问数据库服务器了
    在这里插入图片描述

    远程转发

    远程转发不同之处在于远程转发的监听端口是在远程主机上打开的,就像我们要访问数据库服务器C,使用远程端口转发就是在内部服务器B上进行,使用远程端口转发要保证端口转发服务器和目标服务器之间没有被防火墙拦截。
    SSH 的远程端口转发的格式如下所示

    
    ssh -R sshserver_port:remote_host:remotehost_port sshserver
    

    远程端口的转发应用于数据库服务器和内部管理都不允许外网连接,这时候我们就需要在内部管理服务器上做一个远程端口转发隧道,让远程主机可以与数据库服务器建立连接

    
    ssh -R 1080:centos6 -Nf centos7
    

    这样远程主机监听本地端口,使用telnet协议就可以远程访问数据库服务器了。

    展开全文
  • SSH介绍和使用,SSH key教程

    万次阅读 2018-05-30 13:57:12
    1. SSHSSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。简单说,SSH是一种网络协议,用于计算机之间的加密登录。最早的...

    1. SSH

    SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。简单说,SSH是一种网络协议,用于计算机之间的加密登录

    最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。如果要在Windows系统中使用SSH,会用到另一种软件PuTTY。

    SSH之所以能够保证安全,原因在于它采用了公钥加密

    过程:

    (1)远程主机收到用户的登录请求,把自己的公钥发给用户。

    (2)用户使用这个公钥,将登录密码加密后,发送回来。

    (3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。

    中间人攻击与解决办法:

        中间人收到远程主机公钥之后,冒充远程主机将伪造的公钥发给用户,用户将很难辨别真伪,用户用伪造的公钥加密时会被中间人截获,会出现安全漏洞。因为不像https协议,SSH协议的公钥是没有证书中心(CA)公证的,也就是说,是自己签发的。

        解决办法:

        如果是第一次登录对方主机,系统会出现下面的提示:

          $ ssh user@host
          The authenticity of host 'host (12.18.429.21)' can't be established.
          RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.
          Are you sure you want to continue connecting (yes/no)?
        表示无法确认host主机的真实性,只知道它的 公钥指纹是***,接受输入yes?

        所谓"公钥指纹",是指公钥长度较长(这里采用RSA(Rivest-Shamir-Adleman一直非对称加密算法),长达1024位),很难比对,所以对其进行MD5计算,将它变成一个128位的指纹。上例中是98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d以简化对比。远程主机必须在自己的网站上贴出公钥指纹,以便用户自行核对。

        输入yes后,出现:

    Warning: Permanently added 'host,12.18.429.21' (RSA) to the list of known hosts.
        然后,会要求输入密码。如果密码正确,就可以登录了。

        当远程主机的公钥被接受以后,它就会被保存在文件$HOME/.ssh/known_hosts之中。下次再连接这台主机,系统就会认出它的公钥已经保存在本地了,从而跳过警告部分,直接提示输入密码。

        每个SSH用户都有自己的known_hosts文件,此外系统也有一个这样的文件,通常是/etc/ssh/ssh_known_hosts,保存一些对所有用户都可信赖的远程主机的公钥。

    2. 用法

    SSH主要用于远程登录。假定你要以用户名user,登录远程主机host,只要一条简单命令就可以了。
      $ ssh user@host

    如果本地用户名与远程用户名一致,登录时可以省略用户名。
      $ ssh host

    SSH的默认端口是22,也就是说,你的登录请求会送进远程主机的22端口。使用p参数,可以修改这个端口。
      $ ssh -p 2222 user@host

    上面这条命令表示,ssh直接连接远程主机的2222端口。

    3. SSH key 登陆

        使用密码登录,每次都必须输入密码,非常麻烦。SSH提供了公钥登录,可以省去输入密码的步骤

        用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。

        这种方法要求用户必须提供自己的公钥。如果没有现成的,可以直接用ssh-keygen生成一个:

          $ ssh-keygen

        其中一步是私钥设置口令(passphrase),如果担心私钥的安全,这里可以设置一个。


        运行结束以后,在$HOME/.ssh/目录下,会新生成两个文件:id_rsa.pub和id_rsa。前者是你的公钥,后者是你的私钥。
        

        这时再输入下面的命令,将公钥传送到远程主机host上面
      $ ssh-copy-id user@host


    好了,从此你再登录,就不需要输入密码了。


    如果还是不行,就打开远程主机的/etc/ssh/sshd_config这个文件,检查下面几行前面"#"注释是否取掉。


      RSAAuthentication yes
      PubkeyAuthentication yes
      AuthorizedKeysFile .ssh/authorized_keys


    然后,重启远程主机的ssh服务。


      // ubuntu系统
      service ssh restart


      // debian系统

      /etc/init.d/ssh restart


    4. 其他ssh问题解决  

        a. 使用git gui生成公钥私钥:

            git Gui>Help>Show ssh key > generate

            产生的keys存储在Users/Username/.ssh文件夹中

        b. win10使用git clone ssh://user@host/**/**.git 的时候报错no matching key exchange method found. Their offer: diffie-hellman-group1-sha1

            解决: 在windows Users/Username/.ssh 中添加一个名为config的文件,中间填上

    Host infrashdev003.sh.intel.com
        KexAlgorithms +diffie-hellman-group1-sha1


    https://en.wikipedia.org/wiki/Man-in-the-middle_attack

    http://www.ruanyifeng.com/blog/2013/08/linux_boot_process.html

    展开全文
  • ssh介绍

    千次阅读 2007-04-19 20:58:00
    什么是SSH? 传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其...
    什么是SSH?
    
      传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的,就是很容易受到“中间人”(man-in-the-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 [user]@[local machine]

      “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”。然后执行:

      chmod 644 .ssh/authorized_keys

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

      如果你想从不同的计算机登录到远程主机,“authorized_keys”文件也可以有多个公用密匙。在这种情况下,必须在新的计算机上重新生成一对密匙,然后把生成的“identify.pub”文件拷贝并粘贴到远程主机的“authorized_keys”文件里。当然在新的计算机上你必须有一个帐号,而且密匙是用口令保护的。有一点很重要,就是当你取消了这个帐号之后,别忘了把这一对密匙删掉。

      配置SSH

      配置客户端的软件
      OpenSSH有三种配置方式:命令行参数、用户配置文件和系统级的配置文件(“/etc/ssh/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”;其它的设置选项(如果没有用命令行参数)“ForwardX11”和“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 sshd”。

      l        PasswordAuthentication yes

      把这个选项设置为“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”的文件拷贝到远程服务器www.foobar.com上你的家目录下。而且你在远程服务器上的帐号名为“bilbo”。可以用这个命令:

      scp dumb www.foobar.com">bilbo@www.foobar.com:.

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

      scp www.foobar.com:dumb">bilbo@www.foobar.com:dumb .

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

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

      Host *fbc
      HostName www.foobar.com
      User bilbo
      ForwardAgent yes

      那么你就可以用“fbc”来代替www.foobar.com">“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可以为几乎所有的协议提供“安全通道”。FTP是一个有一点奇怪的协议(例如需要两个端口)而且不同的服务程序和服务程序之间、客户程序和客户程序之间还有一些差别。

      实现“加密通道”的方法是使用“端口转发”。你可以把一个没有用到的本地端口(通常大于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]:[remote port] [some command]

      你不仅可以转发多个端口而且可以在“~/.ssh/config”文件中用“LocalForward”设置经常使用的一些转发端口。

      为POP加上“加密通道”
      你可以用POP协议从服务器上取email。为POP加上“加密通道”可以防止POP的密码被网络监听器(sniffer)监听到。还有一个好处就是SSH的压缩方式可以让邮件传输得更快。

      假定你在pop.foobar.com上有一个POP帐号,你的用户名是“bilbo”你的POP口令是“topsecret”。用来建立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 fetchmail和在“/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重说明了如何通过SSH使用linuxconf:

      其命令为:

      remadmin --exec [link_command] linuxconf --guiproto

      如果你想在两台计算机之间用加密的方式传送信息,那么最好用ssh。命令是:

      remadmin --exec ssh -l [account] linuxconf --guiproto

      这是非常有效的而且运行用图形界面管理计算机。

      这种方法需要在客户端安装linuxconf。其它的方法还有直接登录到服务器上用“X11Forwarding”或字符界面运行linuxconf。

      为Webmin加上“加密通道”
      Webmin是一个新的基于浏览器的配置工具。它运行在1000端口。你可以用SSH的“端口转发”对它进行加密:

      ssh -f -l [remote user name] [remote host] -L 1234:[remote host]:10000 tail -f /etc/motd

      把浏览器指向

      http://localhost:1234

     
    展开全文
  • SSH基础 在 Linux 中 SSH 是 非常常用 的工具,通过 SSH 客户端 我们可以连接到运行了 SSH 服务器 的远程机器上。 SSH 客户端是一种使用 Secure Shell(SSH) 协议连接到远程计算机的软件程序; SSH 是目前较...
  • ssh介绍及使用方法

    2011-08-04 14:59:55
    ssh使用方法ssh使用方法ssh使用方法ssh使用方法ssh使用方法
  • J2EE SSH介绍

    2008-10-16 21:49:59
    struts spring hibernate 3种框架的好处及其简介.
  • SSH简介

    2017-08-22 10:30:11
    SSH初步的介绍资料,希望大家指正错误
  • ssh协议简单介绍

    万次阅读 2014-10-13 10:44:19
    一、什么是SSH   SSH是英文Secure Shell的简写形式。通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。使用SSH,还有一个额外的好处就是...
  • SSH设置别名访问远程服务器详细介绍 一般使用ssh访问远程服务器的命令是:ssh username@ip地址, 例如:ssh root@112.232.12.12,然后输入密码即可访问。 以Mac OS为例,其他操作系统,根据目录自行查找 设置如下...
  • ;本章目标;1什么是ssh; 打开和连接ssh服务器; ssh安全性;2VNC Server配置;VNC Server配置; 启动VNC Server; VNC 连接;关闭VNC 服务;本章总结;健康 诚信 卓越 共赢
  • ssh2 框架介绍

    2015-04-12 10:36:22
    ssh2 框架介绍
  • 使用纯Java实现一个WebSSH项目

    万次阅读 多人点赞 2020-03-10 13:18:21
    使用纯Java语言实现的WebSSH项目。 技术:SpringBoot+WebSockey+jsch+xterm.js
  • SSH秘钥介绍与使用

    千次阅读 2020-04-27 13:01:53
    SSH介绍 ssh是一种加密的网络传输协议。可在不安全的网络中为网络服务提供安全的传输环境。SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接。SSH最常见的用途是远程登录系统,人们通常利用SSH来传输...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 122,756
精华内容 49,102
关键字:

ssh介绍