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

$ ssh user@host

如果在hosts文件中配置了别名,就可以直接使用别名登录了。

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

整个过程是这样的:(1)远程主机收到用户的登录请求,把自己的公钥发给用户。(2)用户使用这个公钥,将登录密码加密后,发送回来。(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。

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

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

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

$ ssh-keygen

重要参数解析:

-t:指定加密方式,有四种“dsa”, “ecdsa”, “ed25519”, or “rsa”,一般用rsa.

-P:提供(旧)密码短语.

-f:指定密钥文件名。可以使用绝对路径也可以使用相对路径,但文件必须放在登陆用户的家目录的.ssh/目录中。不提供此参数,默认放在家目录的.ssh/下面。

在$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

远程主机将用户的公钥,保存在登录后的用户主目录的$HOME/.ssh/authorized_keys文件中。公钥就是一段字符串,只要把它追加在authorized_keys文件的末尾就行了。

这里不使用上面的ssh-copy-id命令,改用下面的命令,解释公钥的保存过程:

$ ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub

这里只是完成了本地机免密登录远程主机。

假设要配置几台主机之间的互信。

那就在每台主机下面都生成秘钥文件:

$ ssh-keygen -t rsa -P ' ' -f 'id_rsa'

然后把每台主机的公钥互相追加保存在每台主机的 .ssh/authorized_keys 文件中。

最后也可以给主机起个别名保存在/etc/hosts 文件中

比如192.168.2.100 node1

  192.168.2.101 node2

这样就可以用别名登录了

ssh node1