一、生成并输出密钥
1. 生成密钥对
使用Windows PowerShell
ssh-keygen -t ed25519 -C "key_note" -f $env:USERPROFILE\.ssh\key-name使用Ubuntu Terminal
ssh-keygen -t ed25519 -C "key_note" -f ~/.ssh/key-name其中,ed25519为椭圆曲线加密算法,key_note为标识密钥用途的注释,$env:USERPROFILE\.ssh\key-name、~/.ssh/key-name为密钥保存路径。
对于一些对加密位数有要求的算法如RSA,使用-b选项指定加密位数,如-t RSA -b 4096,其中4096为加密位数。
命令运行后提示Enter passphrase是提示设置密码保护私钥,提高安全性。可以留空直接按两次回车跳过。
命令运行完成后会在%USERPROFILE%\.ssh或~/.ssh路径下生成两个文件:
私钥文件
key-name公钥文件
key-name.pub
2. 输出公钥
使用Windows PowerShell
cat $env:USERPROFILE\.ssh\key-name.pub使用Ubuntu Terminal
cat ~/.ssh/key-name.pub注意,务必检查命令以.pub结尾,否则将输出私钥,可能造成密钥泄露。
二、config文件配置
1. config文件位置
Windows:
%USERPROFILE%\.ssh\configUbuntu:
~/.ssh/config
在上述文件结尾添加相关配置。
2. Gitee配置
Host gitee.com
HostName gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/key-name注意修改key-name.
测试命令:
ssh -T git@gitee.com若成功则返回:
Hi USERNAME! You've successfully authenticated, but GITEE.COM does not provide shell access.
3. 云服务器配置
Host sever_ip
HostName sever_ip
User sever_user
IdentityFile ~/.ssh/key-name注意修改key-name、sever_ip、sever_user.
三、known_hosts文件相关问题
在与远程机器第一次建立SSH连接时,会提示远程机器的指纹,输入yes命令后远程机器的指纹将存放在:
Windows:
%USERPROFILE%\.ssh\known_hostsUbuntu:
~/.ssh/known_hosts
当连接远程服务器时,如若因重装系统等因素遇到指纹不匹配问题,将known_hosts文件中相关的指纹删除即可。
四、服务商配置
1. Gitee
注意: 添加公钥需验证用户密码
主页右上角 「个人设置」->「安全设置」->「SSH 公钥」->「添加公钥」 ,添加生成的 public key 添加到当前账户中。
2. 阿里云
注意:密钥生效后,默认会禁止密码登录,如需使用密码登录,参见重新启用密码登录方式。
登录轻量应用服务器管理控制台。
在左侧导航栏,单击服务器。
单击服务器卡片中的实例ID。
在基本信息区域的密钥后,单击创建密钥。
如已创建密钥,单击更换密钥。
在对话框中,完成配置。
具体配置项说明如下:
密钥名称:输入您自定义的密钥名称。例如:
test-ssh-01。创建方式:
自动生成密钥对:由系统自动生成,创建后请下载并妥善保管密钥,密钥仅有一次下载机会。
导入密钥对:输入本地密钥对的公钥内容,使用同一个密钥对管理多台轻量应用服务器。
单击确定。
重启服务器,使密钥登录方式生效。具体操作,请参见查看服务器卡片信息。
如不再使用密钥,单击删除密钥。
3. 自有服务器
上传公钥
在远程服务器上运行:
vim ~/.ssh/authorized_keys将输出的公钥输入到文件中并保存。
配置SSH服务器
确保目标服务器上的SSH服务器配置允许密钥登录。
编辑SSH服务器配置文件/etc/ssh/sshd_config:在远程服务器上运行:
vim /etc/ssh/sshd_config确保以下行的设置如下:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2保存并退出配置文件,并重新启动SSH服务:
sudo systemctl restart ssh五、配置阿里云下载的密钥
1. Mac
需要注意私钥的文件权限需要为-rw-------,即只有所有者有读写权限
chmod 600 ~/.ssh/key-namels -l ~/.ssh/key-name