SSH的免密钥登录原理其实就是SSH认证时将自己的公钥提前存储在需要被访问主机(可以是本主机,也可以是远程主机)的认证文件中,默认该文件路径为:~/.ssh/authorized_keys
。该文件中存储了哪台主机的公钥,那么那台主机就可以通过SSH免密钥登录本主机。
所以过程就是首先生成本机公钥和私钥,然后将公钥插入到需要免密码访问的主机的~/.ssh/authorized_keys
文件中
配置本机SSH免密登录
生成密钥对
1 | ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa |
其中-t
后面跟加密方法,推荐rsa,如果你想使用dsa算法,或者使用dsa算法后发现无法免密登录,可以查看这里(貌似dsa算法以后不再支持免密码登录):http://superuser.com/questions/1016989/ssh-dsa-keys-no-longer-work-for-password-less-authentication-P
后面跟的是密码,这里表示密码为空,-f
后面为么钥存储路径。
此时.ssh
目录中文件如下:
1 | .ssh |
其中.pub
结尾的即为公钥,另一个是私钥
将密码插入到authorized_keys
1 | cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys |
修改权限
1 | chmod 0600 ~/.ssh/authorized_keys |
如果可以正常免密访问,可以不进行权限修改
登录
1 | ssh localhost |
第一次登录会询问yes or no,直接回车,或者输入yes后回车即可
配置远程主机SSH免密登录
假设远程主机的ip已经在本地的hosts文件中添加了映射,并且映射主机名为node1
1 | ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa |
现在就可以直接ssh user@node1
来访问node1主机了,第一次会提示yes or no,直接回车即可
ssh-copy-id -i user@node1
就是将本机的公钥插入到远程主机node1的用户user的authorized_keys
文件中
所以也可以手动通过scp将自己的公钥复制到远程主机,然后再将其手机复制到远程主机authorized_keys
文件的结尾
如果需要反向访问,就需要从远程主机上进行相同的操作