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