Linux下配置SSH免密访问

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
2
3
.ssh
├── id_rsa
└── id_rsa.pub

其中.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
2
$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
$ ssh-copy-id -i user@node1

现在就可以直接ssh user@node1来访问node1主机了,第一次会提示yes or no,直接回车即可

ssh-copy-id -i user@node1就是将本机的公钥插入到远程主机node1的用户user的authorized_keys文件中
所以也可以手动通过scp将自己的公钥复制到远程主机,然后再将其手机复制到远程主机authorized_keys文件的结尾

如果需要反向访问,就需要从远程主机上进行相同的操作