【Linux】 使用ssh连接远程服务器
前言:SSH,英文全称是Secure Shell Protocol(安全的壳程序协议)。SSH是现在公司基本上都在使用的一种文字接口的加密传输技术,采用的是非对称秘钥系统。而对于我这种普通用户来说,ssh密钥登录的最吸引我的地方就是,可以实现免密登录,从而减少了输入密码口令的繁琐,节省时间,同时可以做到(基本)安全无虞。
公私钥简介与原理
公钥和私钥都属于非对称加密算法的一个实现,这个加密算法的信息交换过程是:
1.持有公钥的一方(甲)在收到持有私钥的一方(乙)的请求时,甲会在自己的公钥列表中查找是否有乙的公钥,如果有则使用一个随机字串使用公钥加密并发送给乙。2.乙收到加密的字串使用自己的私钥进行解密,并将解密后的字串发送给甲。3.甲接收到乙发送来的字串与自己的字串进行对比,如果通过则验证通过,否则验证失败。
步骤
原理部分不过多赘述
以我自己在用的CentOS远程服务器为例,本地是Windows操作系统。
首先需要安装git[1]
1)打开git bash
,输入
ssh-keygen -t rsa -C "youremail@example.com"
参数说明:
-C参数是用于识别这个密钥的注释,网上很多教程都直接让写自己的邮箱,并未给出其意义,其实次参数只是写一些注释来方便自己识别(The email is only optional field to identify the key.):-C = comment to identify the key
-t参数是指定密钥的类型:-t = The type of the key to generate
之后会提示让输入一个密码,此处密码可以为空,若使用空密码直接敲回车即可。
2)此时在win自己用户名下会多出来一个.ssh
的文件夹,里面有两个文件,分别是id_rsa
即私钥和id_rsa.pub
即公钥
3)将公钥复制到远程服务器CentOS的home
目录下面,保存为~.ssh/authorized_keys
文件
4)如此,我们就可以愉快地使用ssh密钥免密码登录服务器了
进阶1
1) ssh除了可以登录服务器,还可以用于 GitHub[2],Gitee[3]等一众支持ssh的代码托管网站,具体操作参考网站的教程。这里的进阶是想给出配置多用户的方法。
以Windows系统环境为例,在前文所述.ssh
文件夹下新建文件config
,模板为
config文件模板
参数说明:
Host : 自定义名称,配合IdentityFile
可以用于区分不同的账户
Port : 端口名,一般为22,可以用在行首加#
注释忽略掉
HostName: 服务器的ip地址或代码托管网站的域名
PreferredAuthentications: 用于指定优先认证的方式
User : 用于连接服务器的话,输入用户名配合IdentityFile
可登录到指定的账户
IdentityFile: 用于指定私钥所在位置
example:我有2个GitHub账户,Host分别是github.com 与github2,则在使用时,分别使用git@github.com
与git@github2
即可访问特定账户的GitHub仓库。当然,前提是config里面的设置是正确的。
进阶2
VSCode( Visual Studio Code)使用ssh连接远程服务器进行开发。安装Remote Development
扩展,然后按照步骤一步一步设置就好,VSCode里面可能遇到的参数,其意义也与进阶1里面提到的相同。
这里主要说一下可能会遇到的问题。可能会遇到错误信息为Bad owner or permissions
而不能成功连接的问题。产生问题的源头是win10 自带的OpenSSH客户端.
解决方法是,卸载自带的OpenSSH,方法如下:
卸载OpenSSH
使用自己下载的git中的ssh。
参考:
VSCode Docs: Remote Development Tips and Tricks[4]
VSCode Docs: Remote Development using SSH[5]
引用链接
[1] git: https://git-scm.com/downloads[2] GitHub: https://www.github.com[3] Gitee: https://gitee.com/[4] VSCode Docs: Remote Development Tips and Tricks: https://code.visualstudio.com/docs/remote/troubleshooting#_local-ssh-file-and-folder-permissions[5] VSCode Docs: Remote Development using SSH: https://code.visualstudio.com/docs/remote/ssh#_getting-started