场景
经常使用Git工具后者登录服务器的小伙伴肯定都会配置ssh免登录,这样技能提升效率,又安全,本文就讲一下配置ssh免登录相关的工作。
本文以Mac为例,Windows环境大同小异
相关文件
ssh的配置,存储在用户目录的.ssh隐藏文件夹下 cd ~/.ssh && ls -a
查看目录会看到几个文件
id_rsa
id_rsa_pub
config(如果没有,请手动创建)
known_hosts(如果没有,请手动创建)
id_rsa是私钥,始终存储在本机设备上, id_ras_pub是和私钥对应的公钥,通常配置到远程仓库或者远程服务器上,github和gitlab等在设置中都可以找到ssh配置方法
config是用来管理多个公私钥对与不同服务对配置关系,长下面这个样子
Host github.comHostName github.comPreferredAuthentications publickeyIdentityFile ~/.ssh/id_rsa
known_hosts里面记录的是每次通过ssh链接到远程服务或git服务时,使用的公钥信息,下次成功连接时就会写入公钥信息,当远程的公钥发生改变,和known_hosts文件中不匹配就会提示 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
设置ssh免登录
生成秘钥对
ssh-keygen -t rsa -C "YOUR_EMAIL@YOUREMAIL.COM" -f ~/.ssh/gitee
-t 指定密钥类型,默认是 rsa ,可以省略。 -C 设置注释文字,比如邮箱。 -f 指定密钥文件存储文件名。
名字默认为id_rsa和id_rsa.pub 这里强烈建议通过-f参数,修改为对应的平台,例如github,gitlab,gitee等
执行后一直按回车键确认即可,最后出现下面内容即成功
Generating public/private rsa key pair.Enter passphrase (empty for no passphrase):Enter same passphrase again:Your identification has been saved in /Users/peakj/code_space/mess/testYour public key has been saved in /Users/peakj/code_space/mess/test.pubThe key fingerprint is:SHA256:OuHLjibJ7GQ35n4gY8rpANSEWknCZetjKSCz8S4OwCk YOUR_EMAIL@YOUREMAIL.COMThe key's randomart image is:+---[RSA 3072]----+|o.+= || +* . ||*o o ||*=o . ||E+.= . S ||+.* o. o ||===++.+ ||=*=+.+.o ||.+.++o+ |+----[SHA256]-----+
然后执行cat gitee.pub
打印出公钥内容,复制粘贴到对应的平台即可
配置域名和私钥对应关系
# giteeHost gitee.comHostName gitee.comPreferredAuthentications publickeyIdentityFile ~/.ssh/gitee
Host #域名,可以是IP地址
HostName #域名名称
PreferredAuthentications publickey #默认值,不需要修改
IdentityFile ~/.ssh/gitee #匹配本地的私钥文件
我的配置:
# githubHost github.comHostName github.comPreferredAuthentications publickeyIdentityFile ~/.ssh/id_rsa# gitlabHost git.100tal.comHostName git.100tal.comPreferredAuthentications publickeyIdentityFile ~/.ssh/gitlab_rsa# giteeHost gitee.comHostName gitee.comPreferredAuthentications publickeyIdentityFile ~/.ssh/gitee
ssh目录下的文件:
├── config├── gitee├── gitee.pub├── gitlab_rsa├── gitlab_rsa.pub├── id_rsa├── id_rsa.pub├── known_hosts
测试ssh(以gitee为例)
ssh -T git@gitee.com
如果出现Hi USERNAME! You've successfully authenticated, but github does not provide shell access.
说明配置成功
如果出现Permission denied (publickey)
说明权限有问题,检查config文件是否有名称或者路径错误,或者公钥是否正确配置到远端服务
原文:https://juejin.cn/post/7094130082624569381