SSH秘钥自动管理与无密码登录指南
原文链接:https://blog.xieqiaokang.com/posts/3517905979.html
SSH 免密码登录远程服务器,Github,gitee 等,以及 SSH config 的配置
需求:在机器 A 上,免密码 ssh 登录到机器 B。
基本步骤
在机器 A 上生成公钥/私钥对
ssh-keygen -t rsa
一路回车,会在用户目录的 .ssh
文件夹下生成密钥对 id_rsa
和 id_rsa.pub
。
也可生成多个密钥自行改名,后在 config
中配置不同主机使用不同的密钥。
将机器 A 生成的公钥复制到机器 B 中
可用 ssh-copy-id
命令将机器 A 生成的公钥 id_rsa.pub
复制到机器 B 中
# username@host_ip
ssh-copy-id -i id_rsa.pub xieqiaokang@192.168.6.31
如果远程服务器不在内网之中,而是通过一个外网 IP 的 xxxxx 端口转发登陆ssh,则与 ssh 登陆一样,指定端口号即可。
# username@host_public_ip -p port
ssh-copy-id -i id_rsa.pub xieqiaokang@202.38.xx.xxx -p xxxxx
登录到远程机器不用输入密码
ssh xieqiaokang@192.168.6.31
# ssh xieqiaokang@202.38.xx.xxx -p xxxxx # 若存在端口转发
到此,我们就已经可以直接使用 ssh 免密码登陆服务器了。
配置 github,gitee 等使用密钥认证
github,gitee 等代码托管平台同样支持 ssh 验证,此时上文的机器 B 就可以是 github 对应的主机。github 与 gitee 等都提供了上传公钥的选项,如在 github 中,网页端登陆自己的账号后,进入 settings -> SSH and GPG keys -> New SSH key
即可上传自己的 ssh 公钥,Title
为给自己本地计算机取的名字,如“matebook”,方便记忆该密钥属于哪台主机。Key
则为本地公钥 id_rsa.pub
里面的内容,可以文本编辑器打开后复制上去。
上传成功后,就可以在 SSH 界面看到已经上传的界面,可将自己的不同电脑的公钥都上传上去,这样在这些电脑上通过 ssh 使用 github 远程仓库时,便可直接通过密钥认证而不需要每次都输入密码。gitee,coding 等托管平台同样支持 ssh key 认证,可以设置里面查看。
此时,可通过一下命令在本地验证密钥是否配置成功
git -T git@github.com
git -T git@gitee.com
如果出现以下结果,说明配置已经成功,红框里面的内容为自己在对应平台上的账号名
config 文件配置(可选)
经过上述的步骤,我们已经完成了 ssh 通过密钥验证的基本设置,一般情况下可不必再对 config
做额外的配置。如果想要简化每台主机的登陆(取别名,免去每次登陆都需要输入用户名@IP地址
),或者想要给每台主机,或者 github,gitee 配置不同的密钥,那么在将不同的公钥上传至对应主机后,则需要配置 config
为每台主机指定对应的私钥进行配对验证。在本地用户目录的 .ssh
下,查看是否有 config
文件,如果没有则创建该空白文本文件,然后按照以下格式填写每台主机。
Host ti3 # 主机名,随便取
HostName 202.38.xx.xxx # 主机IP(机器B)
Port xxxxx # 若为默认端口22,可不设定此项
User xieqiaokang # 在机器B上的用户名
IdentityFile C:\Users\xieqk\.ssh\id_rsa # 本机私钥路径,若为默认的 id_rsa,则可不填
其中,如果符合默认设置的内容则可不填。User
正常情况下填自己在远程服务器下的用户名,但对于 github 或 gitee 等平台,User
项需填写为 git
,具体可参考如下配置。
此时,可通过之前提到的 ssh -T git@github.com
操作验证 github 密钥配置是否成功。此外,由于给自己的远程主机配置了 ti3
的别名,此时可直接通过以下简化的命令登陆该远程服务器
ssh ti3 # 等效于 ssh xieqiaokang@192.168.6.31