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,保留一些对所有用户都可信赖的近程主机的公钥。
  1. 用法

SSH次要用于近程登录。假设你要以用户名user,登录近程主机host,只有一条简略命令就能够了。
  $ ssh user@host

如果本地用户名与近程用户名统一,登录时能够省略用户名。
  $ ssh host

SSH的默认端口是22,也就是说,你的登录申请会送进近程主机的22端口。应用p参数,能够批改这个端口。
  $ ssh -p 2222 user@host

下面这条命令示意,ssh间接连贯近程主机的2222端口。

  1. 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

  1. 其余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

参考链接:

2 Ways to create private key in Linux