原理
//图片来源于zhihu
Ubuntu A
sudo apt-get install openssh-server
/etc/ssh/ssh_config
RSAAuthentication yes
PubkeyAuthenticationyes
#AuthorizedKeysFile %h/.ssh/authorized_keys
chmod 644 authorized_keys
chmod 700 -R .ssh
Win7 B
ssh-keygen
chmod 600 lsb_id_rsa
B复制id_rsa.pub为A的.ssh/authorized_keys
1.ssh-copy-id(方便不用手工控制权限,小心覆盖原来的authorized_keys文件)ssh-copy-id -i ~/.ssh/id_rsa.pub <username>@<host>
2.scp
3.手动复制
注意点:
如果添加公钥后,还是无法访问,也可能是ServerB主机上面的一个文件known_hosts中已经存在ServerA的ip信息,删除重新访问即可。
Connection closed by $IP
可能是超过系统默认失败次数了,然后清理就ok了~【faillog -a;faillog -r】
在前面步骤都正确无误的情况下,每次远程登录还是提示让输入密码,这时候有可能是权限问题:
chmod 644 authorized_keys再次登录就ok了~【如果是Red Hat 5.6的话,最好改成600,否则认为是不安全的~】
证书如果有passphrase则第一次key登录要输入这个密码
要保证.ssh和authorized_keys都只有用户自己有写权限。否则验证无效
使用私钥生成公钥
ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub
在远程登录的时候可能会发现,在输入完用户名后需要等很长一段时间才会提示输入密码。其实这是由于 sshd 需要反查客户端的 dns 信息导致的。可以通过禁用这个特性来大幅提高登录的速度。首先,打开 sshd_config 文件:
sudo nano /etc/ssh/sshd_config
找到 GSSAPI options 这一节,将下面两行注释掉:
#GSSAPIAuthentication yes #GSSAPIDelegateCredentials no然后重新启动 ssh 服务即可。
参考资料
https://blog.csdn.net/u012031380/article/details/80569217
https://blog.csdn.net/netwalk/article/details/12952051