目录标题
本地笔记本免密(通过SSH公钥和私钥)连接远程服务器或者github
因本地笔记本每次登录公司远程服务器都需要输入账号密码,比较影响工作效率,为解决此问题,特意写此博客;本机登录远程服务器其实和登录github仓库有异曲同工的地方。gitbash可以操作远程端仓库,亦可作为终端与远程服务器建立链接。
1. VS code安装及配置远程服务器地址和用户名等
- 在本地端/自己笔记本上安装VS code。
- 在VS code中搜索插件Remote-SSH并安装,安装成功后左侧会出现如下所示图标:
- 点击该图标->点击齿轮按钮(配置按钮),出现配置界面,在里面输入相应的服务器地址和用户名即可,如果是公司给你分配的工作空间,那么用户名就是公司给你分配的用户名
修改配置文件
选中对应的远程服务器->右击->连接服务器
由于没有对公钥进行配置,这种登录方式需要密码进行登录。
2. 本地端笔记本生成对应的公钥和私钥用于免密链接远程端服务器
本地端生成公钥和私钥有两种办法,一种是本地端口没有安装gitbash,直接在window cmd powershell中生成公钥和私钥,另一种是安装git,在gitbash中生成本地端的公钥和私钥,建议使用gitbash,gitbash可以提供linux类的操作指令来操作本地端。
-
ssh-keygen 命令生成公钥和私钥,公钥路径可默认,直接回车,然后输入密码,不输入可直接回车,生成公钥界面如下:
-
公钥的作用,
(1).很多代码服务器都是需要认证的,ssh认证是其中的一种。在客户端生成公钥,把生成的公钥添加到代码服务器,你以后连接服务器拉取代码时就不用每次都输入用户名和密码了。 (2).很多git服务器都是用ssh认证方式,你需要把你生成的公钥发送给代码仓库管理员,让他给你添加到服务器上,你就可以通过ssh自由地拉取和提交代码了。 (3).如果是github、码云、coding、华为云开发者,你把公钥加到自己个人中心的SSH公钥列表里即可。
-
Windows查看ssh公钥方法:
1.打开你的git bash 窗口 2.进入.ssh目录: cd ~/.ssh 3.找到id_rsa.pub文件: ls 4.查看公钥: cat id_rsa.pub 或者 vim id_rsa.pub 5.绝对路径cat ~/.ssh/id_rsa.pub
3. 本地端笔记本链接到远程端
将公钥复制到被登陆的主机上的 ~/.ssh/authorized_keys 文件中
拷贝公钥有两种方法,其原理都相同:
1. 使用 ssh-copy-id 直接拷贝
如果安装了Git的话,打开Git bash使用 ssh-copy-id 进行拷贝公钥非常方便,只需要指定目标主机和目标主机的用户即可。在本地端打开gitbash窗口,输入如下命令:
ssh-copy-id -i ~/.ssh/id_rsa.pub tengfei.yue@10.19.0.13 (服务器地址更改过,为保护隐私)
ssh-copy-id -i id_rsa.pub tengfei.yue@10.19.0.13 (这两个操作命令主要区别在于是在那个工作空间,直接在.ssh文件夹里打开gitbash,则用当前这个,其他情况则用上面那个)
然后依次输入yes和密码即可
如果远程服务器不在内网之中,而是通过一个外网 IP 的 xxxxx 端口转发登陆ssh,则与 ssh 登陆一样,指定端口号即可。
# username@host_public_ip -p port
ssh-copy-id -i id_rsa.pub tengfei.yue@10.19.0.13 -p xxxxx
登录到远程机器不用输入密码
ssh tengfei.yue@10.19.0.13 #即可登录到远程服务器,此时命令行的路径会变为远程端的路径或者相应的信息。
#ssh tengfei.yue@10.19.0.13 -p xxxxx # 若存在端口转发
2. 自己创建文件进行拷贝
如果没有安装Git,好像Windows PowerShell不支持ssh-copy-id命令;
先cd到Windows10的用户下的 .ssh 目录,使用scp命令将authorized_keys文件拷贝到linux下
scp .\id_rsa.pub tengfei.yue@10.19.0.13:/home/users/tengfei.yue
拷贝时需要密码
然后使用ssh登录Ubuntu在用户目录下(/home/users/tengfei.yue)创建.ssh文件夹,需要将该目录权限改为700,该目录的权限必须是700才有效,然后将id_rsa.pub文件移动到.ssh目录下,并修改其名称为authorized_keys,修改其权限为600,该文件有规定如果属组其他人出现可写则文件就不会生效。
此时回到windows10下,使用ssh命令登录,可以看到,不再需要密码了
如果远程服务器已经有了.ssh文件夹,且里面也有了authorized_keys文件,则在远程服务器中直接使用如下命令将公钥id_rsa.pub追加到远程服务器管理密码登录权限的文件(authorized_keys)中即可:
cd /home/users/tengfei.yue/.ssh
cat /home/users/tengfei.yue/id_rsa.pub >> authorized_keys
注意:如果~/.ssh目录下不存在authorized_keys文件手动添加
touch authorized_keys
修改权限:
chmod 700 ~/.ssh/
chmod 600 ~/.ssh/authorized_keys
此时,本地服务器A的公钥(登录远程服务器B的权限)追加到远程服务器B中的权限文件authorized_keys中,本地服务器A可免密登录远程服务器B了。重启vscode便可免密登入远程服务器
原因:因为此时远程服务器B的密码登录权限文件authorized_keys中已经有本地服务器A的公钥,即A获得了B的登录权限。
注意:远程端服务器的.ssh文件夹一定要放对地方,本人的远程端服务器防止位置为/home/users/tengfei.yue/,不同的服务器防止位置不同,本人此处为公司分配空间,因此需要放置在此位置,如果是自己完全自建的远程服务器,一般是在 /root 根目录。个人理解,一般自己的远程端服务器工作权限在那块就把.ssh文件夹放置在此处即可。
本篇博客如有不正确的地方敬请指正。