SSH的免密钥登录原理其实就是SSH认证时将自己的公钥提前存储在需要被访问主机(可以是本主机,也可以是远程主机)的认证文件中,默认该文件路径为:
~/.ssh/authorized_keys
。该文件中存储了哪台主机的公钥,那么那台主机就可以通过SSH免密钥登录本主机。过程:首先生成本机公钥和私钥,然后将公钥插入到需要免密码访问的主机的
~/.ssh/authorized_keys
文件中。核心命令:
ssh-copy-id
生成密钥对
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
目录中文件如下:
.ssh ├── id_rsa └── id_rsa.pub
其中
.pub
结尾的即为公钥,另一个是私钥。本机登录
将密码插入到authorized_keys
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
修改权限
chmod 0600 ~/.ssh/authorized_keys
如果可以正常免密访问,可以不进行权限修改。
登录
ssh localhost
第一次登录会询问yes or no,直接回车,或者输入yes后回车即可
远程登录
配置远程主机SSH免密登录
- 假设远程主机的ip已经在本地的hosts文件中添加了映射,并且映射主机名为node1
- 现在就可以直接
ssh user@node1
来访问node1主机了,第一次会提示yes or no,直接回车即可
- 使用命令:
ssh-copy-id -i user@node1 # 直接用ip ssh-copy-id user@xx.xx.xx.xx # -p 指定端口 ssh-copy-id -p port user@xx.xx.xx.xx
就是将本机的公钥插入到远程主机node1的用户user的
authorized_keys
文件中- 所以也可以手动通过scp将自己的公钥复制到远程主机,然后再将其手动复制到远程主机
authorized_keys
文件的结尾
- 如果需要反向访问,就需要从远程主机上进行相同的操作